Mousemove ganzes Fenster
-
Hi
Ich habe eine DialogBox, jetzt möchte ich wissen ob der Cursor über dem Fenster ist oder nicht.
Gedacht hatte ich mir es mit WM_MOUSEMOVE zu probieren.Funktioniert auch aber sobald ich Buttons,Editfelder usw im Fenster habe sprechen natürlich wieder Hover und Leave an. Gibt es eine Nachricht für das komplette Fenster ? incl. NC-Area?
Ach Ja mehrere Strukuren von TRACKMOUSEVENT für jedes HWND anzulegen hat auch nicht gefunzt.
lg Peter... case WM_MOUSEMOVE: tme.cbSize=sizeof(TRACKMOUSEEVENT); tme.dwFlags=TME_HOVER|TME_LEAVE; tme.hwndTrack=hwndDlg; TrackMouseEvent(&tme); break; case WM_MOUSEHOVER: //Funktion1(.. break; case WM_MOUSELEAVE: //Funktion2(.. break; ...
-
Eventuel SetCapture(hWnd)/ReleaseCapture()
-
Du benötigst dann am besten einen Hook für Deine Anwendung.
BTW Aus reiem Interesse: Warum benötigst Du das?
-
capmouse schrieb:
Eventuel SetCapture(hWnd)/ReleaseCapture()
Habe ich auch schon versucht..selbes Problem mit den Buttons...
Du benötigst dann am besten einen Hook für Deine Anwendung.
Hast Du einen Beispielcode
BTW Aus reiem Interesse: Warum benötigst Du das?
Das Fenster soll beim Hovern die Farbe verändern.
-
Dann würde ich das Ändern der Farbe aber in jedem Control einbauen. Das ist doch weitaus einfacher, das über ein entsprechendes Subclassing oder eigene Klassen zu lösen, als zentral.
Und nein zu Hoos habe ich kein Beispiel, aber die gibt es zu hunderten im Netz.
-
Danke für die Antworten. Habs so gelöst:
case WM_MOUSEMOVE: { if (GetCapture() != hwndDlg) { WindowTransparency(hwndDlg,255); SetCapture(hwndDlg); } else { RECT rect; GetWindowRect(hwndDlg, &rect); POINT pt = { LOWORD(lParam), HIWORD(lParam) }; ClientToScreen(hwndDlg, &pt); if (!PtInRect(&rect, pt)) { WindowTransparency(hwndDlg,180); } ReleaseCapture(); } } break;
-
Und wie funktioniert nun ein Mausklick in ein anderes Control, als den Dialog?