ts-soft hat geschrieben:Ich hab für einen Button ein Subclassing Callback erstellt, also eins, das nur die Ereignisse des Buttons erhält!!!
Wie kann ich erfahren, wann die Maus nicht mehr über den Button ist. Dieses Ereignis muß aber in dem Subclassing Callback auftreten. Also irgenwas wie #WM_LOST???? oder so ähnlich, bzw. gibts da was???
Wenn der Cursor auf den Button geschoben wird, bekommst
Du ja die Nachricht #WM_MOUSEMOVE.
Hier setzt Du nun den MouseInput mit SetCapture_(hWnd)
auf den Button. Damit sagst Du das Du weiterhin Mausnach-
richten bekommen sollst. Die bekommst Du dann auch wenn
der User den Mauszeiger wieder vom Button runter bewegt
hat, also auch außerhalb des Buttons/Gadgets.
Wenn der Cursor dann außerhalb des Buttons ist, rufst Du
ReleaseCapture_() auf. Damit gibst Du den MausInput wieder
frei, so daß wieder andere Controls die Nachrichten bekommen.
PseudoCode im Subclassing-Callback:
Code: Alles auswählen
case #WM_MOUSEMOVE:
If CursorPos_auf_Button
SetCapture_(hWnd)
Else
ReleaseCapture_()
EndIf
Eine andere Möglichkeit: Das Fenster/Control, welches den
MouseInput verliert, bekommt die Nachricht #WM_CAPTURECHANGED.
Das ist sozusagen Dein gesuchtes #WM_LOST....
Dritte Möglichkeit: Mit der Funktion TrackMouseEvent_() kannst
Du Windows anweisen Dir die 2 Messages #WM_MOUSEHOVER
und #WM_MOUSELEAVE zu schicken.
#WM_MOUSELEAVE wird Dir dann gesendet wenn der Cursor
die Control-Area verläßt.
Das gibt es allerdings erst ab (glaube ich) Win98/NT4, weshalb
man normal eher die obigen Methoden verwendet.
Mußt mal selbst in MSDN/PSDK schauen, ich habe das jetzt
nicht genau im Kopf ab wann es das genau gab.
Hope it helps.