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???
Subclassing - MouseNotOver
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Subclassing - MouseNotOver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Schau dir mal WindowFromPoint() aus der API an damit kannst du anhand der cursordaten abfragen ob sich die maus über deinem handle befindet oder nicht. der rückgabewert von WindowFromPoint ist das handle über dem sich die maus gerad befindet.
Beispiel
Beispiel
Code: Alles auswählen
GetCursorPos_(Cursor.POINT)
If WindowFromPoint_(Cursor\x,Cursor\y)<>dein_handle
lost
else
not_lost
endif
Re: Subclassing - MouseNotOver
Wenn der Cursor auf den Button geschoben wird, bekommstts-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???
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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin

Code: Alles auswählen
ElseIf Msg = #WM_MOUSEMOVE
GetCursorPos_(pt.POINT)
GetWindowRect_(hWnd,re.RECT)
If PtInRect_(re,pt\x,pt\y)
SetCapture_(hWnd)
Debug "MouseOver"
Else
ReleaseCapture_()
Debug "Out"
EndIf

SetCapture_() hab ich ja bisher nur für Fenster genommen, das dies auch bei Childs funzt, daran hab ich nicht gedacht, ich *Dummkopf*
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
