Nachrichtenaufbau
Wie Sie bereits erfahren haben spielen Nachrichten die zentrale Rolle in
einem WINDOWS-Programm. Mit Hilfe von Nachrichten erfährt die Anwendung z.B.
wenn der Anwender eine Taste drückt oder mit der Maus ins Anwendungsfenster
klickt.
Doch aus was besteht eigentlich eine WINDOWS Nachricht? Sehen Sie sich dazu
zunächst an, wie WINDOWS die Nachrichtenstruktur deklariert:
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG; |
Das Strukturelement hwnd gibt den
Empfänger der Nachricht an. Es besitzt den Datentyp HWND. Wie Sie
vorhin bei den WINDOWS Datentypen erfahren haben, ist HWND der WINDOWS Datentyp
für ein Fenster-Handle. Und damit haben wir bereits eine wichtige Erkenntnis
gewonnen die Sie niemals vergessen sollten:
 |
Nachrichten haben als Absender oder Empfänger
im Normalfall immer ein Fenster!
|
Dies mag Sie vielleicht im ersten Augenblick etwas verwundern, gibt es unter
WINDOWS doch auch solch nützliche Elemente wie Buttons oder aufklappbare
Listboxen die ebenfalls Nachrichten versenden oder empfangen. Aber merken Sie sich
nun den zweiten wichtigen Satz:
 |
Alles was Sie auf dem Bildschirm sehen und nicht
durch die Anwendung selbst dargestellt wird, ist im Regelfall ein Fenster!
|
Noch eine Anmerkung bevor wir zum zweiten Strukturelement der
Nachrichtenstruktur übergehen: Im ersten Merksatz steht das Wort 'Normalfall'.
Später im Kurs werden Sie auch eine Möglichkeit kennen lernen, Nachrichten an
Anwendungen (Prozesse) zu senden.
Nun aber weiter mit dem Aufbau der Nachrichtenstruktur. Nach dem
Nachrichten-Empfänger folgt die Kennung der Nachrichten. Die
Nachrichten-Kennung message ist ein
vorzeichenloser 32-Bit Wert (UINT). Da sich nun aber Zahlenwerte sehr schlecht
merken lassen, sind für alle System-Nachrichten entsprechende IDs (symbolische
Bezeichner) in der
Datei WINUSER.H definiert. Eine ID setzt sich zusammen aus einem
Präfix, der den Nachrichtentyp beschreibt, und dem eigentlichen Namen der
Nachricht. Die nachfolgende Tabelle enthält eine Übersicht über einige
Nachrichtentypen sowie eine Beispiel-Nachricht dazu:
|
Präfix
|
Nachrichtentyp
|
Beispiel
|
| BM_ |
Button-Nachricht |
BM_SETSTYLE; setzt den
Stil eines Buttons. |
| CB_ |
Combobox-Nachricht |
CB_ADDSTRING; fügt
der Combobox einen Eintrag hinzu. |
| EM_ |
Editfeld-Nachricht |
EM_GETLINE; liest eine
Zeile aus dem Editfeld aus. |
| WM_ |
Allg.
WINDOWS-Nachricht |
WM_CLOSE; Anforderung
das Fenster zu schließen. |
Die beiden nächsten Elemente in der Nachrichtenstruktur wParam
und lParam sind Zusatzinformationen zur
Nachricht. Ihre Bedeutung hängt von der Nachricht ab. Mehr dazu aber im
Verlaufe des Kurses.
Die restlichen Elemente der Struktur time
und pt werden selten ausgewertet. Sie
enthalten zum einen die Systemzeit (in Ticks) bei der die Nachricht aufgetreten
ist und zum anderen die aktuelle Position der Maus beim Auftreten der Nachricht
in Bildschirm-Koordinaten.
 |
Nachrichten bei denen die Mausposition eine wichtige Rolle spielt, wie
z.B. die Mausnachricht WM_MOUSEMOVE, erhalten die aktuelle Mausposition
zusätzlich in den Zusatzinformationen wParam bzw. lParam
übergeben. |
Da wir nun den generellen Aufbau einer Nachricht, wenigsten vom Prinzip her,
kennen, werden wir uns in der nächsten Lektion kurz mit den verschiedenen
Nachrichtentypen beschäftigen.
|