| ||||||||||||||||||||||||||||||||
|
|
|
|
Wie Sie im letzten Schritt erfahren haben sendet WINDOWS immer dann eine WM_PAINT Nachricht an ein Fenster wenn dessen Fensterinhalt (oder ein Teil davon) neu dargestellt werden muss. Dies war unter anderem auch dann der Fall wenn das Fenster vergrößert wurde. Doch häufig benötigen Anwendungen auch dann eine Nachricht über das Verändern der Fenstergröße wenn das Fenster verkleinert wird, so z.B. wenn Größe oder Position von Fensterelementen (Grafiken, Buttons usw.) unmittelbar von der Fenstergröße abhängen.
Wenn ein Fenster in seiner Größe verändert wird versendet WINDOWS eine WM_SIZE Nachricht. Die Zusatzinformationen zur Nachricht haben folgende Bedeutung:
WM_SIZE Nachricht |
|
| WPARAM wParam | Auslöser der Nachricht |
| LPARAM lParam | neue Größe der Client-Area |
Die Zusatz-Information wParam enthält die Ursache für das Auslösen der Nachricht und kann eine der folgenden Konstanten sein:
ID |
Bedeutung |
| SIZE_MAXHIDE | Diese Nachricht wird an alle übergeordneten Fenster gesendet wenn ein anderes Fenster als Vollbild dargestellt wird. |
| SIZE_MAXIMIZED | Das Fenster wurde zum Vollbild vergrößert. |
| SIZE_MAXSHOW | Diese Nachricht wird an alle übergeordneten Fenster gesendet wenn eines der anderen Fenster vom Vollbild auf seine ursprüngliche Größe verkleinert wird. |
| SIZE_MINIMIZED | Das Fenster wurde zum Symbol verkleinert. |
| SIZE_RESTORED | Das Fenster wurde in der Größe verändert aber nicht zum Symbol verkleinert oder zum Vollbild vergrößert. |
Beachten Sie bitte, dass die beiden Nachrichtentypen SIZE_MAXHIDE und SIZE_MAXSHOW von anderen Fenstern ausgelöst werden.
Die 32-Bit breite Zusatz-Information lParam enthält in komprimierter Form die neue Größe der Client-Area des Fensters. Das Low-Word (untere 16 Bits) enthält die Breite und das High-Word (obere 16 Bits) die Höhe.
| Obwohl die Fensterbreite und -höhe intern als 32-Bit Werte vorliegen, enthält lParam nur jeweils die unteren 16 Bits. Zur Dekodierung des High- und Low-Words stehen die Makros HIWORD(x) und LOWORD(x) zur Verfügung. |
Beachten Sie außerdem, dass beim Verkleinern des Fensters nicht automatisch eine WM_PAINT Nachricht generiert wird, wohl aber beim Vergrößern. Wollen Sie den Inhalt eines Fensters auch beim Verkleinern neu zeichnen lassen, so müssen Sie dies explizit durch den Aufruf der Funktion InvalidateRect(...) im Nachrichtenbearbeiter der WM_SIZE Nachricht tun.
| Sie können das komplette Neuzeichnen des Fensters auch über den Stil der Fensterklasse veranlassen. Setzen Sie dazu den Fensterklassenstil CS_HREDRAW und/oder CS_VREDRAW. Beachten Sie dabei aber, dass immer der komplette Fensterinhalt beim Verändern der Fenstergröße als ungültig gekennzeichnet wird. |
Fügen Sie nun in die Fensterprozedur die Bearbeitung der WM_SIZE
Nachricht ein. Beim Eintreffen einer WM_SIZE Nachricht soll wieder mittels der Funktion MessageBeep(...) ein Ton ausgegeben
werden, dies aber nur wenn das Fenster nicht zum Symbol verkleinert wird. Verwenden
Sie aber einen anderen Klang wie bei der Bearbeitung der WM_PAINT Nachricht damit Sie
zwischen den beiden Nachrichten unterscheiden können.
Wenn Sie alles richtig eingegeben haben, sollten Sie bei jeder Größenänderungen (außer beim Verkleinern des Fensters zum Symbol) zwei unterschiedliche Klänge hören. |
Damit sind wir am Ende dieses kleinen Ausflugs in die WINDOWS Programmierung unter C angekommen. Jetzt geht's dann weiter mit WINDOWS Programmen mit der MFC.
|
|
|
|
|
|