当前位置:  开发笔记 > 编程语言 > 正文

SetWindowsHookEx,KeyboardProc和非静态成员

如何解决《SetWindowsHookEx,KeyboardProc和非静态成员》经验,为你挑选了1个好方法。

我正在创建一个键盘钩子,其中KeyboardProc是类CWidget的静态成员.

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

};

我想在CWidget :: KeyboardProc中调用CWidget的非静态成员.

最好的方法是什么?

KeyboardProc没有任何32位DWORD,我可以传递'this'指针.



1> Roger Lipsco..:

鉴于您可能只想一次安装一个键盘钩子,只需在您的类中添加一个静态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. */
};

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有