快速健全性检查:是否可以使用仿函数对窗口进行子类化?我遇到了一种情况,我想在 win proc 中提供一些数据,但 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”,显然不是一个好兆头。去掉上面代码的调用,生活又快乐了。:(那么这甚至可能吗,还是我完全走错了路?