Ich implementiere Logik, um globale Mausklicks zu behandeln, und ich steckte in Moment, wo ich Daten von LowLevelMouseProc bekommen muss. Momentan setze ich eine globale Variable an der Stelle, an der ich die Instanz von MyClass erstelle, und ich kann von LowLevelMouseProc darauf zugreifen, aber ich nehme an, dass das nicht der richtige Ansatz ist.Wie Übergeben Klasseninstanz an LowLevelMouseProc?
Rahmen Haken:
g_myClass = this;
SetWindowsHookEx(WH_MOUSE_LL, MyClass::MouseHookProc, LoadLibraryA("user32.dll"), 0);
LowLevelMouseProc:
LRESULT CALLBACK MyClass::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
g_myClass.onClick(wParam, pMouseStruct->pt.x, pMouseStruct->pt.y); //isn't good
}
Ich denke, ich kann mit globalen Variable gehen, ich dachte nur, es ist dumm. Vielen Dank. – Vladimirs
Verwenden Sie die [RAW-Eingabe-API] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx) anstelle eines Low-Level-Maus-Hooks. Sie können dann 'SetWindowsLongPtr()', 'SetProp()' oder 'SetWindowSubclass()' verwenden, um Ihren Klassenobjektzeiger mit dem HWND zu verknüpfen, der 'WM_INPUT' Nachrichten empfängt. –