Да, он будет работать с более чем одним окном, поскольку хранит указатель на объект C ++ с соответствующим HWND:
Window *wPtr;
...
SetWindowLongPtr(hWnd, 0, (LONG_PTR) wPtr);
и глобальный WndProc
затем извлекает этот указатель и через него вызывает методы объекта:
wPtr = (Window*) ::GetWindowLongPtr(hWnd, 0);
wPtr->WndProc(message, wParam, lParam);
(Обратите внимание, что оригинальный код использует SetWindowLong
, и, следовательно, не будет работать в 64-битной программе - я изменил код выше для использования SetWindowLongPtr
.)