WM_MOUSEMOVE ausserhalb vom Fenster?

Ich hab mir in der Windows-API ein Fenster angelegt und verfolge mit der WM_MOUSEMOVE -Message die Mausbewegungen über das Fenster, um spezielle Zeichenoperationen im Fenster an der Mouse-Position durchzuführen.

Soweit funktioniert auch alles Bestens, wenn allerdings die Maus das Fenster mit einer schnellen Bewegung verlässt gibt es keine Mouse-Message, Mousemessages gibt ja nur bei Cursorbewegungen innerhalb des Fensters. Mein Programm wird nicht benachrichtigt und nimmt daher an, dass sich der Cursor immer noch an der alten Mausposition befindet.

Gibt es eine Möglichkeit zu überprüfen, ob sich die Maus noch auf der Window-Zeichenfläche befindet? Am Besten natürlich per Benachrichtigung mit einer Message…

Steffen

WM_MOUSEMOVE ausserhalb vom Fenster? GetCursorPos
Ich bin net so der Guru, aber soviel ich weiss kannst du fast gar nicht die Messages anderer Fenster abfragen,
ich schlage also vor mit der api procedure
GetCursorPos(TPoint); die position vom Cursor abzufragen
und zu gucken ob sie sich verändert hat.
Also in delphi muss ich eine variable vom typ Tpoint machen,
in C++ muss man ja auch noch auf gross und kleinschreibnug achten oje musst mal gucken wie man GeTcUrSoRpOs schreibt :smile:

wenn noch fragen dazu offen sind frag ich kann dir ein Delphi Beispiel machen *G*

MfG Roman

WM_MOUSELEAVE

Soweit funktioniert auch alles Bestens, wenn allerdings die
Maus das Fenster mit einer schnellen Bewegung verlässt gibt es
keine Mouse-Message, Mousemessages gibt ja nur bei
Cursorbewegungen innerhalb des Fensters. Mein Programm wird
nicht benachrichtigt und nimmt daher an, dass sich der Cursor
immer noch an der alten Mausposition befindet.

Servus,

das Verlassen des Fensters kannst du normalerweise auch über das
MouseEvent WM_MOUSELEAVE mitbekommen.

Dirk

danke schön

GetCursorPos(TPoint); die position vom Cursor abzufragen
und zu gucken ob sie sich verändert hat.
Also in delphi muss ich eine variable vom typ Tpoint machen,
in C++ muss man ja auch noch auf gross und kleinschreibnug
achten oje musst mal gucken wie man GeTcUrSoRpOs schreibt :smile:

hehe, so schlimm ist es ja mit der Gross- und Kleinschreibung auch wieder nicht (zumindest in C++), obwohl mich das beim Umstieg von Pascal auf C am Meisten genervt hat… :smile:

auf der Suche nach WM_MOUSELEAVE hab in der MSDN ein Source gefunden, wo WM_MOUSELEAVE per
#define WM_MOUSELEAVE WM_USER+2“
festgelegt wurde. Diese Nachricht wird von einer Timerfunktion generiert, die auch nichts anderes macht wie:

GetClientRect(hWnd,&rect);
MapWindowPoints(hWnd,NULL,(LPPOINT)&rect,2);
GetCursorPos(&pt);
if (!PtInRect(&rect,pt)) …

Ihr hattet also beide irgendwie Recht gehabt.
Damit kann man doch schon was anfangen, danke… :smile:

cu
Steffen