What's an alternative to GWL_USERDATA for storing an object pointer?
SetWindowLongPtr was created to replace SetWindowLong in these instances. It's LONG_PTR parameter allows you to store a pointer for 32-bit or 64-bit compilations.
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong);
Remember that the constants have changed too, so usage now looks like:
SetWindowLongPtr(hWnd, GWLP_USERDATA, this);
Also don't forget that now to retrieve the pointer, you must use GetWindowLongPtr:
LONG_PTR GetWindowLongPtr( HWND hWnd, int nIndex);
And usage would look like (again, with changed constants):
LONG_PTR lpUserData = GetWindowLongPtr(hWnd, GWLP_USERDATA);MyObject* pMyObject = (MyObject*)lpUserData;
The other alternative is SetProp/RemoveProp (When you are subclassing a window that already uses GWLP_USERDATA)
Another good alternative is ATL style thunking of the WNDPROC, for more info on that, see