Modale Dialogfelder

Ein modales Dialogfeld sollte ein Popup-Fenster ein Systemmenü, eine Titelleiste, und einem dicken Rahmen; Das heißt, sollte die Dialogfeldvorlage WS_POPUP, WS_CAPTION, WS_SYSMENU und DS_MODALFRAME Formatvorlagen angeben. Obwohl eine Anwendung den WS_VISIBLE Stil bezeichnen kann, zeigt das System immer ein modales Dialogfeld unabhängig davon, ob das Dialogfeld Feld Vorlage den WS_VISIBLE-Stil angibt. Eine Anwendung muss kein modales Dialogfeld mit den WS_CHILD-Stil erstellen. Ein modales Dialogfeld mit diesen Stil deaktiviert selbst, jede nachfolgende Eingabe vom Erreichen der Anwendungs zu verhindern.

Eine Anwendung erstellt ein modales Dialogfeld mithilfe der DialogBox oder DialogBoxIndirect -Funktion. DialogBox erfordert den Namen oder den Bezeichner einer Ressource mit eine Dialogfeldvorlage; DialogBoxIndirect erfordert das Handle für ein Objekt mit eine Dialogfeldvorlage. DialogBoxParam und DialogBoxIndirectParam Funktionen auch erstellen modale Dialogfelder; Sie sind identisch mit den zuvor genannten Funktionen aber einen angegebenen Parameter an die Dialogfeldprozedur übergeben, wenn das Dialogfeld erstellt wird.

Wenn Sie das modale Dialogfeld erstellen, macht das System es das aktive Fenster. Das Dialogfeld bleibt aktiv, bis die Dialogfeld im Feld Prozedur die EndDialog -Funktion Ruft oder das System ein Fenster in einer anderen Anwendung aktiviert. Weder der Benutzer noch der Anwendung kann das Besitzerfenster aktiven machen bis das modale Dialogfeld zerstört wird.

Wenn das Besitzerfenster nicht bereits deaktiviert ist, deaktiviert das System automatisch das Fenster und alle untergeordneten Fenster gehören, wenn das modale Dialogfeld erstellt. Das Besitzerfenster bleibt deaktiviert, bis das Dialogfeld zerstört wird. Obwohl eine Dialogfeld im Feld Prozedur könnte potenziell ermöglichen das Besitzerfenster jederzeit aktivieren den Besitzer Niederlagen des Zweck des modalen Dialogfelds und wird nicht empfohlen. Wenn die Dialogfeldprozedur zerstört wird, ermöglicht das System das Besitzerfenster wieder, sondern verursacht nur, wenn das modale Dialogfeld den Besitzer deaktiviert werden.

Wie das System das modale Dialogfeld erzeugt, sendet es die WM_CANCELMODE -Nachricht an das Fenster, (falls vorhanden) derzeit erfassen von Mauseingaben. Eine Anwendung, die diese Nachricht empfängt sollte die Mausauswahl freigeben, sodass der Benutzer die Maus in das modale Dialogfeld wechseln kann. Da das System das Besitzerfenster deaktiviert, alle Maus Eingabe geht verloren, wenn der Besitzer nicht loslassen der Maustaste auf diese Meldung.

Zum Verarbeiten von Nachrichten für das modale Dialogfeld startet das System eine eigenen Meldungsschleife, die vorübergehende Kontrolle der Nachrichtenwarteschlange für die gesamte Anwendung. Wenn das System eine Nachricht, die nicht explizit für das Dialogfeld ist empfängt, sendet es die Meldung zu dem entsprechenden Fenster. Wenn es eine WM_QUIT Nachricht abruft, stellen es die Nachricht zurück an die Nachrichtenwarteschlange der Anwendung so, dass die Anwendung einer Hauptmeldungsschleife schließlich die Nachricht abrufen können.

Wenn die Anwendung Nachrichten leer ist, sendet das System die WM_ENTERIDLE Nachricht an das Besitzerfenster. Die Anwendung kann diese Nachricht verwenden, ein Hintergrundtask durchführen, während das Dialogfeld auf dem Bildschirm bleibt. Wenn eine Anwendung verwendet, die die Nachricht auf diese Weise die Anwendung häufig ergeben muss-Steuerelements (z. B. mithilfe der Funktion PeekMessage ) also kann das modale Dialogfeld Benutzereingaben zu empfangen. Um zu verhindern, dass das modale Dialogfeld WM_ENTERIDLE Nachrichten senden, kann die Anwendung den DS_NOIDLEMSG Stil angeben Wenn Sie das Dialogfeld erstellen.

Eine Anwendung zerstört ein modales Dialogfeld, indem Sie die EndDialog -Funktion. In den meisten Fällen ruft die Dialogfeldprozedur EndDialog , wenn der Benutzer den Befehl Schließen im Dialogfeld System Menü wählt oder die Schaltfläche OK oder Abbrechen im Dialogfeld auswählt. Das Dialogfeld kann einen Wert durch die DialogBox -Funktion (oder andere Funktionen erstellen) zurückgeben, indem Sie einen Wert angeben, wenn Sie die EndDialog -Funktion aufrufen. Das System gibt diesen Wert zurück, nach der Zerstörung des Dialogfelds. Die meisten Anwendungen verwenden diesen Rückgabewert, um festzustellen, ob das Dialogfeld die Aufgabe erfolgreich abgeschlossen oder wurde vom Benutzer abgebrochen. Das System ist Steuerelement nicht von der Funktion zurück, der das Dialogfeld erstellt, bis die Dialogfeldprozedur die EndDialog -Funktion aufgerufen hat.

Index