Modale Dialoge


Mit der Funktion DialogBox erzeugen Sie einen modalen Dialog:

DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc)

Auch diese Funktion nutzt eigentlich die Fähigkeiten einer anderen (DialogBoxParam) die Sie ebenso aufrufen könnten. Die Parameter entsprechen der Funktion "CreateDialog" bzw. "CreateDialogParam". Der große Unterschied ist aber, dass Sie hier keine Nachrichtenschleife benötigen. Eine Nachrichtenfunktion schon, aber das Verteilen ankommender Nachrichten übernimmt der Dialogmanager des Systems.

Und weil es in unserem Programm keine Nachrichtenschleife für den Dialog gibt, genügt zum Beenden in der Nachrichtenfunktion der Befehl EndDialog.

case uMsg of
  WM_CLOSE:
    EndDialog(hDlg, 0);
end;

Dieser Befehl zerstört das Fenster aber nicht sofort. Es setzt stattdessen ein Flag und erlaubt so der Dialog-Prozedur die Kontrolle an das System zurückzugeben. Das System prüft das Flag, bevor es versucht die nächste Nachricht zu empfangen. Ist es gesetzt, dann beendet das System die (in dem Fall: interne) Nachrichtenschleife, zerstört das Fenster und benutzt den Wert von "nResult" als Rückgabewert für die Funktion, die den Dialog erstellt hat.

Das heißt auch, dass Sie kein Handle für Ihren Dialog benötigen. Da der Rückgabewert "nResult" entspricht (bzw. im Fehlerfall: -1) müssen Sie eigentlich nur prüfen, ob ein Fehler aufgetreten ist oder nicht, beispielsweise:

if(DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc) = -1) then
  MessageBox(0,'Fehler beim Anzeigen des Dialogs','Dialog-Demo',
  MB_OK or MB_ICONERROR);