Mausposition relativ zu bestimmtem Objekt



  • Hi,

    stellt euch vor ich habe ein Image in einem Formular. Nun möchte ich wissen, an welchen Koordinaten des Images meine Maus sich befindet.

    Mit GetCursorPos krieg ich ja die ScreenKoordinaten und könnte sie mit ScreenToClient auf das Formular konvertieren.
    Wie sieht das jetzt aber aus, wenn ich die relativen Koordinaten des Images haben möchte, auf die die Maus zeigt?

    Ich dachte am einfachsten wäre hier ein MouseMove Event, da dort X und Y ja direkt mit dabei sind. Wenn ich jetzt aber per Scrollrad das Image in der Größe veränder' (und die Position verschiebe) und die Maus an der gleichen Stelle lasse, wird ja kein MouseMove Event erzeugt, die Koordinaten haben sich durch die Vergrößerung aber geändert.
    Probiert habe ich schon selber ein MouseMove Event auszulösen über

    mouse_event(MOUSEEVENTF_MOVE,0,0,0,0);
    

    aber es wird nur ausgeführt, wenn ich dx oder dy um mindestens 1 "bewege". Ist ja jetzt aber blöd jedesmal die Maus ein Stückchen zu bewegen, nur um an die Koordinaten aus MouseMove zu kommen 🙄

    Und außerdem, wenn jetzt noch ein anderes Objekt über dem Image liegt, wird das MouseMove Ereignis vom Image ja eh nicht aufgerufen.

    Gibt es noch andere Möglichkeiten an die entsprechende Mausposition zu kommen? Bin grad etwas verwirrt 😕



  • ScreenToClient / ClientToScreen...

    Wenn sich Dein Control verändert musst Du selber dafür sorgen, das sich alles entsprechend anpasst. Woher soll Windows wissen wann was zu passieren hat?

    Am einfachsten wäre es nach dem Resize des Controls ein WM_SETCURSOR an sich selbst zu senden, sofern der Cursor im Fenster liegt...

    Das mit dem mouse_event lass mal bleiben. Das würde das Event physikalisch an der Position auslösen auch wenn Dein Fenster teilweise verdeckt wäre. In dem Fall würde der Event wo anders landen.



  • Vielen Dank für den Hinweis! Funktioniert wunderbar, hatte da irgendwie nen Knoten im Hirn ...

    Ja mit dem mouse_event hast Du auch Recht, ich habs gemerkt..viel zu unkonrollierbar 😞



  • WM_MOUSEMOVE liefert die koordinaten auch.