考虑到您可能一次只需要安装一个键盘挂钩,只需向您的类中添加一个静态p该成员:
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. */
};