Dialoge sind eigene Fenster die einen Windows-Handle erhalten. Das Aussehen der Dialoge wird durch die Resourcen-Datei bestimmt. Im Resourcen-Headerfile, welches im Hauptprogramm eingebunden wird, werden außerdem die Dialogelemente mit ID\'s identifiziert.
void WndProcWMLBUTTONDOWN (HWND hWnd)
{
FARPROC lpitDialog; // Instanz-Verbinder zur Dialog-Funktion
lpitDialog = MakeProcInstance ((FARPROC)DlgProc, hMainInst);
DialogBox (hMainInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, lpitDialog);
FreeProcInstance (lpitDialog);
InvalidateRect (hWnd, NULL, TRUE);
}
In diesem Beispiel wird der Dialog beim Klicken der Linken Maustaste angelegt. Dazu muss zuerst eine Instanz auf die Dialogfenster-Funktion angelegt werden. Das betrifft aber nur die 16Bit-Windows-Version, da im Win32 auf die Funktion direkt zugegriffen werden kann. Die Funktion DialogBox erzeugt dann das Fenster welches als Parameter den Handle des Hauptfensters, die Resourcen-ID des Dialogs, der Handle des Erzeugers des Fensters (in diesem Fall ebenfalls das Hauptfenster) und die Instanz der Fensterfunktion. Die Kontrolle an das Hauptfenster wird hier erst wieder zurückgegeben, wenn der Dialog geschlossen wird (modaler Dialog).
4. Meldungen
In Windows-Programmen wird hauptsächlich mit Meldungen gearbeitet. Wie schon erwähnt werden die Meldungen an die jeweiligen Fensterfunktionen geschickt. Da auch Dialogfenster genauso Fenster sind wie das Hauptfenster gibt es diesselben Nachrichten. Hier einige der wichtigsten Windows-Meldungen.
WM_PAINT:
Wird bei jeder Änderung des jeweiligen Fensters aufgerufen. Hier werden die grafischen Ausgaben im Fenster festgelegt.
WM_LBUTTONDOWN, WM_RBUTTONDOWN,..:
Wird bei Maustastendruck ausgelöst.
WM_DESTROY:
Wird ausgelöst wenn das Fenster geschlossen wird.
WM_CLOSE:
Im Prinzip wie WM_DESTROY, nur daß bei WM_CLOSE nur die Anweisung daß das Fenster geschlossen werden soll geschickt wird. Mit dieser Nachricht kann auch verhindert werden daß das Fenster normal geschlossen wird.
WM_INITDIALOG:
Wird ausgelöst, wenn ein Dialog neu erstellt wurde. Dient für Initialisierungen.
WM_COMMAND:
Ist die Meldung, daß ein Command-Button gedrückt wurde. Im wPar-Parameter ist die Resourcen-ID des Buttons festgehalten.
Die Meldungen müssen nicht unbedingt vom Programm ausgelöst werden, es ist auch möglich die Meldungen mittels PostMessage selbst zu schicken. Bsp.:PostMessage (hWnd, WM_CLOSE, 0, 0);
Es wird an das Fenster ein WM_CLOSE geschickt, welches dann beim nächsten GetMessage darauf reagiert.
|