MOUSEMOVE zuordnen
-
Hallo Leute,
wie kann ich die WM_MOUSEMOVE Nachricht nur speziell für ein einzelnes Steuerelement(Picturebox) empfangen und für dieses Element dann relative Mauskoordinaten bekommen?
-MfG Rodney
-
Per Subclassing. Relativ zu was? Client-Bereich, Workspace? Möglicherweise suchst du MapWindowPoints.
-
Shlo schrieb:
Per Subclassing. Relativ zu was? Client-Bereich, Workspace? Möglicherweise suchst du MapWindowPoints.
die Funktion sieht ja schonmal nicht schlecht aus aber mein Code liefert irgendwie nur Müll zurück:
case WM_MOUSEMOVE: int ergebnis,mausx,mausy=0; tagPOINT punkte = {LOWORD(lParam),HIWORD(lParam)}; ergebnis = MapWindowPoints(hDlg,GetDlgItem(hDlg,IDC_cibox),&punkte,2); mausx = LOWORD(ergebnis); mausy = HIWORD(ergebnis); if (mausx && mausy)MessageBox(hDlg,"Maus bewegt sich über der Picture-box!","Hinweis",MB_ICONINFORMATION|MB_OK);Ich müsste doch in den mausx und mausy koordinaten jetzt die relativen Positionen zur Picturebox haben oder eben Null wenn das ganze außerhalb ist oder??
MapWindowPoints liefert aber immer einen hohen negativen Wert zurück...
Danach sind dann beide Koordinaten 65529...
-
Wenn du WM_MOUSEMOVE in der WndProc des Controls abfängst, dann solltest du doch direkt relative Koordinaten bekommen:
The coordinate is relative to the upper-left corner of the client area.
Und das bezieht sich afaik auf den Client-Bereich des Child-Windows

-
flenders schrieb:
Wenn du WM_MOUSEMOVE in der WndProc des Controls abfängst, dann solltest du doch direkt relative Koordinaten bekommen:
The coordinate is relative to the upper-left corner of the client area.
Und das bezieht sich afaik auf den Client-Bereich des Child-Windows

Ich empfange das Mousemove aber doch in der Callback-Schleife des Hauptfensters, und er kann ja nicht hellsehen dass ich die Koordinaten relativ zu meinem darin enthaltenen picture-window erhalten will. Oder kann ich eine Callback direkt für dieses Fenster definieren wenn ich es im Ressourceneditor erstellt habe??

-
Bekommst du dort auch WM_MOUSEMOVE während die Maus über dem Control ist - oder hast du etwa die Maus gecaptured?!
Per Subclassing solltest du das zwar nachträglich auch direkt im Child abfangen können, aber wenn du die Message schon bekommst ist das wohl eher unnötiger Aufwand
Versuch es mal so:
int mausx,mausy; POINT punkt = {GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)}; MapWindowPoints(hDlg,GetDlgItem(hDlg,IDC_cibox),&punkt,1);Jetzt solltest du in punkt relative Koordinaten zum Child haben. Oder willst du sogar nur wissen, ob die Maus über den Child ist?!
-
flenders schrieb:
Bekommst du dort auch WM_MOUSEMOVE während die Maus über dem Control ist - oder hast du etwa die Maus gecaptured?!
Per Subclassing solltest du das zwar nachträglich auch direkt im Child abfangen können, aber wenn du die Message schon bekommst ist das wohl eher unnötiger Aufwand
Versuch es mal so:
int mausx,mausy; POINT punkt = {GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)}; MapWindowPoints(hDlg,GetDlgItem(hDlg,IDC_cibox),&punkt,1);Jetzt solltest du in punkt relative Koordinaten zum Child haben. Oder willst du sogar nur wissen, ob die Maus über den Child ist?!
nein ich möchte auch die Koordinaten haben, aber ich erhalte jetzt auch werte wenn die maus nicht über der Picturebox ist... (die werte passen aber)
Danke für die bisherige Hilfe!
-
Weiß keiner eine Lösung wie ich die realtiven Koordinaten bekomme?
-
Ich verstehe immernoch nicht, relativ zu was die Koordinaten sein sollen? Willst du jetzt überprüfen ob der Cursor über deine Picturebox bewegt wird? Dann reicht eventuell WindowFromPoint bzw. ChildFromPoint.
-
Shlo schrieb:
Ich verstehe immernoch nicht, relativ zu was die Koordinaten sein sollen? Willst du jetzt überprüfen ob der Cursor über deine Picturebox bewegt wird? Dann reicht eventuell WindowFromPoint bzw. ChildFromPoint.Die Koordinaten sollen relativ zur linken oberen ecke meiner Picturebox sein...
-
ah jetzt hab ichs, mich hat das ganze nur verwirrt da ja immer koordinaten zurückgegeben werden wenn die maus links oder unterhalb des Fensterpunktes liegt...