代码之家  ›  专栏  ›  技术社区  ›  Gautam Jain

setwindowshookex、keyboardproc和非静态成员

  •  7
  • Gautam Jain  · 技术社区  · 17 年前

    我正在创建一个键盘挂钩,其中keyboardproc是一个类cwidget的静态成员。

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

    我想在cwidget::keyboardproc内部调用cwidget的非静态成员。

    最好的方法是什么?

    keyboardproc没有任何32位的dword,我可以在其中传递“this”指针。

    1 回复  |  直到 17 年前
        1
  •  6
  •   Roger Lipscombe    17 年前

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