Mit der Funktion
DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc)
Auch diese Funktion nutzt eigentlich die Fähigkeiten einer anderen (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
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);