Der fensterlnde Nachrichtendienst //1533

Heute möchte ich einmal über Windows-Messages schreiben.
Bei der Programmierung von Windows-Anwendungen hat man immer wieder damit zu tun.

Im Gegensatz zu Consolen-Anwendungen reagieren Windows-Anwendungen auf Ereignisse. Diese Ereignisse werden üblicherweise durch Messages dem Programm mitgeteilt.
Jede Maus-Bewegung oder jeder Tastendruck ist ein Ereignis, dem verschiedene Messages zugeordnet sind. Aber es gibt noch viel mehr, etliche hundert. Ich werde mich hier aber auf eine Handvoll der wichtigsten beschränken.
Generische Windows-Programmierung ist prozedural. Verbreitet sind jedoch Frameworks, die die Behandlung in Objekten kapseln.

Ich muss mich wirklich zurückhalten, um nicht zu ausführlich und spitzfindig zu werden. Die hier lesenden Entwickler mögen mir verzeihen, wenn ich nicht alle Einzelheiten berücksichtige.

Wie auch immer – Betriebssystem und Anwendungen tauschen Messages aus. Das läuft etwa über den Befehl sendmessage. Dieser nimmt als Parameter das Handle des Fensters, die Art der Message und zusätzliche Werte, die die Message genauer definieren und Daten übergeben, und gibt ein Ergebnis zurück, dem man im einfachsten Fall entnehmen kann, ob die Verarbeitung der Message fehlerlos abgelaufen ist.
Jedes Fenster kreist in einer Schleife („wndproc“), in der die Queue der eingehenden Messages abgearbeitet wird.

Wichtige Botschaften sind etwa das Anzeigen/Verstecken oder Aktivieren/Deaktivieren eines Fensters. Mouse- und Tastaturereignisse hatte ich bereits erwähnt. Ein Fenster muss auch wissen, wann es sich selbst zeichnen muss, wenn sich seine Größe oder Position ändert, oder wenn es der Nutzer schließen will, und muss dann entsprechend reagieren.
Der Entwickler hat die Möglichkeit, sich in jede einzelne Ereignisroutine einzuklinken. Windows liefert zwar eine Default-Behandlung, aber wenn man etwas besonderes will, muss man das ausdrücklich programmieren.

Nicht nur ein ganzes Anwandungsfenster ist ein Fenster, sondern es kann aus einer ganzen Hierarchie weiterer Fenster bestehen. So ist jede Schaltfläche ein Fenster, genauso wie es ein Eingabefeld ist.
Jedes Kontrollelement hat spezifische Messages. Ein Eingabefeld bietet beispielsweise die Möglichkeit, über eine Message den Text auszulesen oder zu setzen.

Wer ein gut durchdachtes, intuitives Windows GUI erstellen will, kommt nicht um die Kenntnis der wichtigsten Messages herum (auch wenn sie in diversen Frameworks so gekapselt sind, dass man das nicht mehr direkt merkt).
RAD-Umgebungen vereinfachen das Positionieren und Konfigurieren der visuellen Elemente, so dass sich der Entwickler auf die Programmieraufgaben konzentrieren kann, die hinter der Benutzeroberfläche geschehen sollen.

Advertisements

Über Anne Nühm (breakpoint)

Die Programmierschlampe.
Dieser Beitrag wurde unter Uncategorized abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

12 Antworten zu Der fensterlnde Nachrichtendienst //1533

  1. idgie13 schreibt:

    Kommt drauf an, in welcher Sprache man entwickelt. Für meine WPF-Anwendungen arbeite ich mit dem MVVM-Konzept – da gibt es keine Messages zwischen den Fenstern, sondern die Daten werden via Databinding ans Viewmodel gekoppelt und die Kommunikation läuft in Commands innerhalb des Viewmodels oder über EventListeners.

    Du schreibst vermutlich Deine Applikationen in C++, oder?

    Gefällt mir

  2. ednong schreibt:

    Aha.
    Gibt es davon noch eine Fortsetzung?

    Gefällt mir

  3. Pingback: Computer – was tut er? //1601 | breakpoint

  4. Pingback: Lenztweets //1735 | breakpoint

  5. Pingback: breakplaining: Klick! //1801 | breakpoint

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.