SetWindowLongPtr был создан для замены SetWindowLong в этих случаях. Параметр LONG_PTR позволяет хранить указатель для 32-битных или 64-битных компиляций.
LONG_PTR SetWindowLongPtr(
HWND hWnd,
int nIndex,
LONG_PTR dwNewLong
);
Помните, что константы тоже изменились, поэтому использование теперь выглядит так:
SetWindowLongPtr(hWnd, GWLP_USERDATA, this);
Также не забывайте, что теперь, чтобы получить указатель, вы должны использовать GetWindowLongPtr :
LONG_PTR GetWindowLongPtr(
HWND hWnd,
int nIndex
);
И использование будет выглядеть (опять же, с измененными константами):
LONG_PTR lpUserData = GetWindowLongPtr(hWnd, GWLP_USERDATA);
MyObject* pMyObject = (MyObject*)lpUserData;