Einzelnen Beitrag anzeigen

Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#4

Re: Ereignisverteilung verstehen

  Alt 24. Okt 2009, 12:11
Sorry, das sollte kein Angriff sein. Ich halte auch mehr vom verstehen als vom benutzen.

Windows empfängt im Hintergrund alle Ereignisse (Interrupts durch Hardware(Treiber), ..).
Jetzt könnte es so ein das es eine Liste aller Fenster gibt (aller Objekte, welche sich registriert haben um z.B. Mausbotschaften zu empfangen, sprich an der Ereignisbehandlung teilzuhaben (->WindowProc)).
Diese Liste könnte nach der "z-Koordinate" sortiert sein, so das das oberste Fenster an erster Stelle steht. Dann wird die Liste durchlaufen und geprüft ob PunktImRechteck(Fensterrechteck). Wenn dies erfüllt ist, dann wird die WindowProc des Fensters mit dem Ereignis (der Botschaft) aufgerufen. Jetzt obliegt des dieser Funktion, ob die Botschaft selber verarbeitet wird oder z.B. ala "KeyPreView" erst an andere übergeordnete Fenster weitergegeben wird. Windows kümmert das nicht, es wartet nur bis der WindowProc-Aufruf abgeschlossen ist. Wenn Message.Result vom Fenster gesetzt wurde weiß Windows das die Botschaft angenommen wurde, also ist die Behandlung beendet. Ansonsten wird ggf. weitergesucht ob ein anderes Fenster sich dafür interessiert (das hängt halt vom Ereignis und vom Result ab, ein MouseKlick geht nur an das oberste Fenster, aber nicht an andere (inaktive) Fenster die darunter liegen, ein QueryEndSession geht an alle TopLevel - Fenster (also die, welche als Parent den Desktop "Windows" haben, bzw. alle "Hauptfenster" der Anwendungen).
Man merkt, die Komplexität entsteht bei der Entscheidung: Wer muss/darf von einem Ereignis etwas mitkriegen.
Such im MSDN mal nach Message / WindowProc, da finden sich einige Erklärungen zu den Abläufen. (GetMessage, HandleMessage, DispatchMessage, ..)

Grüsse, Dirk
  Mit Zitat antworten Zitat