SetWindowsHookEx,KeyboardProc和非静态成员

我正在创build一个键盘钩子,其中KeyboardProc是一个类CWidget的静态成员。

class CWidget { static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam ); }; 

我想在CWidget :: KeyboardProc中调用CWidget的非静态成员。

什么是最好的办法呢?

KeyboardProc没有任何32位的DWORD,我可以通过'这个'指针。

Solutions Collecting From Web of "SetWindowsHookEx,KeyboardProc和非静态成员"

考虑到你可能只需要一次安装一个键盘钩子,只需要添加一个静态的pThis成员到你的类中:

 class CWidget { static HHOOK m_hHook; static CWidget *m_pThis; public: /* NOT static */ bool SetKeyboardHook() { m_pThis = this; m_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, /* etc */); } // Trampoline static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) { return m_pThis->KeyboardProc(code, wParam, lParam); } LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); /* etc. */ };