SetWindowsHookEx, KeyboardProc и Нестатические участники

попробуйте:

git clone --single-branch --branch <branchname> <url>
8
задан Gautam Jain 2 December 2008 в 10:30
поделиться

1 ответ

Учитывая, что Вы, вероятно, только хотите один захват клавиатуры, установленный за один раз, просто добавьте статического 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;
7
ответ дан 5 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: