Быстрая проверка работоспособности: можно ли создать подкласс окна с помощью функтора? Я сталкиваюсь с ситуацией, когда я хочу, чтобы некоторые данные были доступны в процессе выигрыша, но GWLP_USERDATA уже используется. Функтор кажется хорошей альтернативой, но у меня проблемы с его работой.
Вот основы:
class MyWinProc { // Win Proc Functor
public:
MyWinProc(ExternalClass* obj, HWND window) :
obj(obj), window(window) {
oldWinProc = SubclassWindow(window, this); // Apply Subclass
}
virtual ~MyWinProc() {
SubclassWindow(window, oldWinProc); // Remove Subclass
}
LRESULT CALLBACK operator()(HWND, UINT, WPARAM, LPARAM) {
switch( uMsg ) {
case WM_MOUSEMOVE: {
obj->onMouseMove(/*etc*/);
break;
}
}
return CallWindowProc(oldWinProc, hWnd, uMsg, wParam, lParam);
}
private:
ExternalClass* obj;
HWND window;
WNDPROC oldWinProc;
};
Кажется, все хорошо и хорошо, но когда я нажимаю DispatchMessage () в моем сообщении, я «Доступ к месту записи нарушения 0x00000000», очевидно, нехороший знак. Удалите вызов приведенного выше кода, и жизнь снова станет счастливой. :( Так это вообще возможно, или я делаю это совершенно неправильно?