快速完整性檢查:是否可以使用仿函數子類化一個窗口?我遇到了一種情況,我希望在win proc中有一些可用的數據,但是GWLP_USERDATA已經被使用。一個仿函數看起來是一個很好的選擇,但是我很難讓它工作。使用仿函數子類化一個窗口(Win32)
這裏的基礎知識:
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()在我的消息泵,I「訪問衝突寫入位置00000000」,顯然不是一個好兆頭。取消對上述代碼的呼叫,生活再次開心。 :(所以這甚至是可能的,還是我完全錯誤的方式?
的重複http://stackoverflow.com/questions/23083/whats-an-alternative-to-gwluserdata-for-storing-an-對象指針? – Anders 2009-08-30 15:06:17
我不一定稱這是重複的,因爲如果在這種情況下可以使用仿函數,所要問的問題就非常明確。最後,答案與你關聯的問題是一樣的,但重複的答案並不是重複的問題。 :)(我欣賞它,但!) – Toji 2009-08-30 15:37:10