我正在创build一个键盘钩子,其中KeyboardProc是一个类CWidget的静态成员。
class CWidget { static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam ); };
我想在CWidget :: KeyboardProc中调用CWidget的非静态成员。
什么是最好的办法呢?
KeyboardProc没有任何32位的DWORD,我可以通过'这个'指针。
考虑到你可能只需要一次安装一个键盘钩子,只需要添加一个静态的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. */ };