SetWindowsHookEx函数,KeyboardProc和非静态成员
题
我创建一个键盘钩子,其中KeyboardProc是一个类的一个静态成员CWidget。
class CWidget
{
static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam );
};
我想调用CWidget的CWidget :: KeyboardProc内的非静态成员。
什么是做到这一点的最好方法是什么?
KeyboardProc不具有任何32位DWORD哪里可以通过“这个”的指针。
解决方案
既然你可能只需要同时安装一个键盘钩子,只是一个静态pThis成员添加到您的类
// Widget.h
class CWidget
{
static HHOOK m_hHook;
static CWidget *m_pThis;
public:
/* NOT static */
bool SetKeyboardHook()
{
m_pThis = this;
m_hHook = ::SetWindowsHookEx(WH_KEYBOARD, StaticKeyboardProc, /* etc */);
}
// Trampoline
static LRESULT CALLBACK StaticKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
ASSERT(m_pThis != NULL);
m_pThis->KeyboardProc(code, wParam, lParam);
}
LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
/* etc. */
};
您需要定义静态成员:
// Widget.cpp
CWidget *CWidget::m_pThis = NULL;
不隶属于 StackOverflow