PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Laienfrage


Lawmachine79
2019-03-15, 15:54:09
Hey Leute, was passiert technisch eigentlich beim Mouseover über einem Hyperlink oder einer Eingabemaske usw? Also woher weiss der Computer, dass ich mit der Maus über einem Hyperlink bin (der Cursor verändert sich ja). Es wird ja nichts geklickt oder so.

PatkIllA
2019-03-15, 16:21:25
Hey Leute, was passiert technisch eigentlich beim Mouseover über einem Hyperlink oder einer Eingabemaske usw? Also woher weiss der Computer, dass ich mit der Maus über einem Hyperlink bin (der Cursor verändert sich ja). Es wird ja nichts geklickt oder so.
Das Mausbewegen ist genauso ein Ereignis was ausgewertet wird wie das klicken. Das Programm weiß wo der Cursor ist und was darunter ist und kann den so verändern.

Üblicherweise werden die ganzen Ereignisse gesammelt und nacheinander ausgewertet. Wenn das Programm nicht mehr hinterher kommt erscheint "Anwendung reagiert nicht mehr".
Da gibt es buchstäblich hunderte Ereignisse und Maus bewegen ist nur eins von vielen.

Lawmachine79
2019-03-15, 16:43:47
Das Mausbewegen ist genauso ein Ereignis was ausgewertet wird wie das klicken. Das Programm weiß wo der Cursor ist und was darunter ist und kann den so verändern.

Üblicherweise werden die ganzen Ereignisse gesammelt und nacheinander ausgewertet. Wenn das Programm nicht mehr hinterher kommt erscheint "Anwendung reagiert nicht mehr".
Da gibt es buchstäblich hunderte Ereignisse und Maus bewegen ist nur eins von vielen.
Also es wird quasi ständig abgefragt "Wo ist der Cursor" und die Antwort wird verglichen mit den Bildkoordinaten eines Hyperlinks oder einer Eingabemaske?

][immy
2019-03-15, 16:52:52
Also es wird quasi ständig abgefragt "Wo ist der Cursor" und die Antwort wird verglichen mit den Bildkoordinaten eines Hyperlinks oder einer Eingabemaske?
Der Cursor löst ein Event aus. Dieses wird einfach immer weitergegeben bis jemand sagt, ne weiter nicht.

Sprich, Event wird über einem Fenster ausgelöst, das OS gibt es an das Fenster weiter "hier Event für dich" -> Das fenster gibt es an ein Control an der Position weiter -> Das Control an ein Control darin, …
Bis jemand sagt ich verarbeite es
Dann kann das Control sich entscheiden, event ist abgeschlossen oder noch weiter reichen.

Die Events werden quasi am laufenden Band verarbeitet sobald sich der Cursor bewegt.

Monger
2019-03-15, 19:17:06
Also es wird quasi ständig abgefragt "Wo ist der Cursor" und die Antwort wird verglichen mit den Bildkoordinaten eines Hyperlinks oder einer Eingabemaske?
Du löst das Ereignis aus, in dem Moment wo du die Maus bewegst. Jedes Control dass sich für Mausbewegungen interessiert, wird dann via Callback darüber benachrichtigt.
In Wahrheit liegen da unfassbar viele Abstraktionsschichten dazwischen. Jedes Fenster hat ein eigenes Koirdinatensystem, in das erstmal übersetzt werden muss. Windows stellt sicher, dass niemand über Mausbewegungen in fremden Fenstern (oder gar Sessions) benachrichtigt wird. Liegen mehrere Controls übereinander, wird das Event so lange weitergereicht bis es konsumiert wird.

Lawmachine79
2019-03-16, 01:39:15
Du löst das Ereignis aus, in dem Moment wo du die Maus bewegst. Jedes Control dass sich für Mausbewegungen interessiert, wird dann via Callback darüber benachrichtigt.
In Wahrheit liegen da unfassbar viele Abstraktionsschichten dazwischen. Jedes Fenster hat ein eigenes Koirdinatensystem, in das erstmal übersetzt werden muss. Windows stellt sicher, dass niemand über Mausbewegungen in fremden Fenstern (oder gar Sessions) benachrichtigt wird. Liegen mehrere Controls übereinander, wird das Event so lange weitergereicht bis es konsumiert wird.
Also überwachen Prozesse im Hintergrund die Mausbewegungen und gleichen sie zugleich mit den für sie relevanten Bildschirmkoordinaten ab?

PatkIllA
2019-03-16, 08:51:50
Also überwachen Prozesse im Hintergrund die Mausbewegungen und gleichen sie zugleich mit den für sie relevanten Bildschirmkoordinaten ab?
Das macht das Betriebssystem. Die Programme bekommen vom Betriebssystem die für sie relevanten Ereignisse und arbeiten die Ereignsisse dann in einer Schleife ab bis irgendwann eine Nachricht zum Beenden kommt.
Die Aufforderung sich zu beenden kommt sogar an der gleichen Stelle an wie die Mausbewegung. Das hat einfach nur eine andere Nummer.

myMind
2019-03-16, 09:03:21
Also überwachen Prozesse im Hintergrund die Mausbewegungen und gleichen sie zugleich mit den für sie relevanten Bildschirmkoordinaten ab?
Es läuft so ab:

Die Hardware (Maus, Tastatur) sendet Signale an den Treiber
Der Treiber bereitet die Signale auf und gibt sie an das Betriebssystem
Das Betriebssystem erzeugt daraus Ereignis-Nachrichten und gibt sie an die betroffenen Fenster (Controls, Widgets) weiter. In den Nachrichten sind relevante Informationen wie z.B. Mauskoordinaten enthalten.

Man kann sich das für das klassische Win32 API sogar live anschauen mit dem Entwicklungstool Spy++
https://stackoverflow.com/questions/43360339/how-do-i-get-spy-with-visual-studio-2017#

https://docs.microsoft.com/en-us/visualstudio/debugger/media/spy--_messagesview.png?view=vs-2017