ButtonProcedure?
-
Hi, ich wollte mal Fragen, ob es sowas wie eine ButtonProcedure gibt (so wie eine WindowProcedure, eben nur für den Button). Ich habe nämlich das Problem, dass ich Buttons abfragen will, ob die Maus auf dem jeweiligen Button ist. Wie kann ich das machen? Natürlich nicht MFC und so einfach wie möglich. Das eine Beispiel auf CodeProjects ist 500 Zeilen groß. Wozu?! Ich brauch dafür sicher weniger als 250 Zeilen (alles in einem außer die Button-Abfrage ist 183 Zeilen groß ;)).
-
Subclassing
-
Button Procedure mit GetWindowLong holen und auf WM_MOUSEMOVE lauschen.
-
OK ich hab den Sinn verstanden, aber so ganz haut es dann doch nicht hin. Muss ich eine Variable (LONG) anlegen und dann dies schreiben?
ButtonProcedure = GetWindowLong(hButton, GWL_WNDPROC);Problem: ButtonProcedure ist eine Funktion und deswegen ist das hier schonmal nicht möglich. So würde ich die Procedure dann schreiben:
(Ohne switch und case, würde nur Platz verschwenden)LRESULT CALLBACK ButtonProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(msg == WM_MOUSEMOVE) bOnButton = true; else return DefWindowProc(hwnd, msg, wParam, lParam); return 0; }
-
WNDPROC OldWndProc = (WNDPROC) SetWindowLong(hWnd, GWL_WNDPROC, (LONG) NewWndProc); LRESULT APIENTRY NewWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if(msg == WM_MOUSEMOVE) bOnButton = true; else return CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam); }
-
Ah super ich habs verstanden! Vielen Dank!