I am creating a keyboard hook, wherein KeyboardProc is a static member of a class CWidget.
class CWidget
{
static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam );
};
I want to call the non-static members of CWidget inside the CWidget::KeyboardProc.
What is the best way to do it?
KeyboardProc does not have any 32 bit DWORD where I can pass the 'this' pointer.
From stackoverflow
-
Given that you probably only want one keyboard hook installed at a time, just add a static pThis member to your class:
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. */ };
0 comments:
Post a Comment