SetWindowsHookEx, KeyboardProc und nicht-statische Mitglieder
Frage
Ich schaffe eine Tastatur Haken, wobei KeyboardProc ein statisches Element einer Klasse ist CWidget.
class CWidget
{
static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam );
};
Ich will die nicht-statischen Member von CWidget innerhalb des CWidget :: KeyboardProc nennen.
Was ist der beste Weg, es zu tun?
KeyboardProc hat keine 32-Bit-DWORD, wo ich die 'this' Zeiger passieren kann.
Lösung
Da Sie wahrscheinlich nur eine Tastatur-Hook zu einem Zeitpunkt installiert werden sollen, fügen Sie einfach ein statisches pThis Mitglied Ihre Klasse:
// 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. */
};
Sie müssen das statische Element definieren:
// Widget.cpp
CWidget *CWidget::m_pThis = NULL;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow