MouseLeave und MouseDown

15/01/2009 - 14:20 von Ralf Heinzelbach | Report spam
Hallo,

wenn ich ein usercontrol subclasse, dann kann ich - wenn ich die linke
Maustaste zuerst auf dem Control gedrückt habe und halte - das Control
verlassen, aber es wird erst ein MouseLeave event ausgelöst, wenn ich
den linken Mausknopf wieder loslasse.

Aber die Standardcontrols verhalten sich anders:
Ich halte die linke Maustaste auf dem control gedrückt, gehe dann mit
der Maus aus dem Control raus und sehe, dass das control das registriert
hat, indem es den nicht mehr "hot" ist (sieht man vor allem, wenn man
ein Manifest drin hat und XP styles aktiviert hat).
Jetzt frage ich mich: Woher weiß das Control denn, dass der Mauszeiger
nicht mehr über ihm ist? Mit WindowFromPoint? Oder registriert es das
MouseLeave event?

Versteht jemand das Problem?
Ich weiß nicht recht, wie so ein control professionell aufgebaut wird in
Bezug auf Focus und MouseLeave und "Hot"-Status.
Ich habe ein Buch über ActiveX-Controls, aber dieses Thema wird da nicht
behandelt.

Danke, wenn mir jemand helfen kann.
Ralf
 

Lesen sie die antworten

#1 Thorsten Albers
15/01/2009 - 22:32 | Warnen spam
Ralf Heinzelbach schrieb im Beitrag
...
Jetzt frage ich mich: Woher weiß das Control denn, dass der Mauszeiger
nicht mehr über ihm ist? Mit WindowFromPoint? Oder registriert es das
MouseLeave event?



Üblicherweise 'captured' sich ein Fenster, das angeklickt wurde, für solche
Fàllen die Maus (Windows-API SetCapture()). Dadurch werden fast alle
Mausnachrichten an das Fenster geschickt, auch wenn die Maus sich nicht
mehr über dem Fenster befindet. Erst beim Auftreten bestimmter
Mausereignisse oder durch Aufruf von ReleaseCapture() (Windows-API) wird
die Maus wieder 'freigegeben'. Empfàngt das Fenster nach dem 'capturen'
z.B. eine WM_MOUSEMOVE-Nachricht, kann es deren Koordinaten mit den eigenen
vergleichen und entsprechend reagieren.

Thorsten Albers

albers (a) uni-freiburg.de

Ähnliche fragen