Computer & Technik
Betriebssysteme
Windows
Senden und Empfangen von Botschaften
MS-WINDOWS basiert auf der Verarbeitung von Meldungen und Ereignissen, die mit Fenster(handles) verknüpft werden. Unter WINDOWS sendet so ziemlich alles Botschaften: Die Tastatur, die Maus, eventuell der oder die Timer und natürlich auch die eigene Applikation. Unter WINDOWS ist es verpönt, direkte Programmfunktionen aufzurufen, wenn damit mehr als ein Aufruf verbunden ist. Vielmehr sendet man sich selbst eine Nachricht, die die gewünschte Aktion auslöst.
WINDOWS verfügt über eine Reihe von Standard-Meldungen, die sich auf allgemeine Ereignisse wie zum beispiel Mausaktivitäten oder Tastatureingaben beziehen. Daneben gibt es auch Meldungen, die mit den von ihnen betroffenen Objekten verbunden sind, wie zum Beispiel die Anwahl von Menüpunkten. Sie ergibt immer nur einen Sinn, wenn das betroffene Menü bzw. der jeweilige Menüpunkt mit der Meldung transportiert werden.
Die Hauptschleife eines jeden WINDOWS-Programms sieht dementsprechend eintönig aus:
VAR
Message : TMsg;
WHILE GetMessage(Message, 0, 0, 0) DO
BEGIN
TranslateMessage(Message);
DispatchMessage(Message);
END;
Dies ist die Standard-Schleife, in die jede WINDOWS-Applikation nach der Initialisierung fällt. Sie wird erst wieder zum Beenden des Programms verlassen.
In diese Schleife lassen sich natürlich eine ganze Reihe von Tricks (oder sollte ich besser schreiben "Schweinereien") einbauen, aber der Grundaufbau ist immer gleich.
Da WINDOWS fleißig Meldungen verschickt, muß irgendwo in der Applikation eine Anlaufstelle existieren. Denn erstens muß WINDOWS wissen, wohin die Meldungen verschickt werden sollen, und zweitens müssen die Meldungen ja auch irgendwie bearbeitet werden. Letzteres ist jedoch nicht zwangsläufig nötig. Alle nicht bearbeiteten Meldungen werden üblicherweise an die System-Funktion DefWindowProc() übergeben, die diese normalerweise "schluckt".
Doch zurück zum Ansprechpartner von WINDOWS. Dessen Name lautet nach Microsoft-Vorgabe WinMain. Jede WINDOWS-Applikation muß eine Funktion diesen Namens implementieren, denn sobald die Applikation geladen ist, übergibt WINDOWS die Systemkontrolle an eben diese Funktion.