Finestre di dialogo modali

Una finestra di dialogo modale dovrebbe essere una finestra popup, avendo un sistema menu, una barra del titolo e un bordo spesso; cioè, il modello di finestra di dialogo dovrebbe specificare gli stili WS_POPUP, WS_SYSMENU, WS_CAPTION e DS_MODALFRAME. Anche se un'applicazione può designare lo stile WS_VISIBLE, il sistema visualizza sempre dialogo modale indipendentemente dal fatto se il modello di finestra di dialogo consente di specificare lo stile WS_VISIBLE. Un'applicazione non deve creare una finestra di dialogo modale avendo lo stile WS_CHILD. Dialogo modale con questo stile disattiva stesso, impedendo ogni ingresso susseguente raggiungano l'applicazione.

Un'applicazione crea una finestra di dialogo modale utilizzando la DialogBox o DialogBoxIndirect . DialogBox richiede il nome o l'identificatore di una risorsa che contiene un modello di finestra di dialogo; DialogBoxIndirect richiede il manico di un oggetto di memoria contenente un modello di finestra di dialogo. Le funzioni DialogBoxParam e DialogBoxIndirectParam anche creare finestre di dialogo modale; essi sono identici alle funzioni già citate ma passare un parametro specificato alla procedura di dialogo casella quando viene creata la finestra di dialogo.

Quando si crea la finestra di dialogo modale, il sistema rende la finestra attiva. Nella finestra di dialogo rimane attiva fino a quando la procedura di casella di dialogo chiama la funzione EndDialog o il sistema attiva una finestra in un'altra applicazione. Né l'utente né l'applicazione può rendere la finestra proprietaria attivo fino a quando la finestra di dialogo modale è distrutto.

Quando la finestra proprietaria non è già disattivata, il sistema disattiva automaticamente la finestra e tutte le finestre del bambino appartenendo ad essa quando crea la finestra di dialogo modale. La finestra proprietaria rimane disabile fino a quando la finestra di dialogo viene distrutto. Anche se una routine di finestra di dialogo potrebbe potenzialmente attivare la finestra proprietaria in qualsiasi momento, consentendo le sconfitte proprietario lo scopo della finestra di dialogo modale e non è raccomandata. Quando la procedura di casella di dialogo è distrutto, il sistema permette la finestra proprietaria di nuovo, ma solo se la finestra di dialogo modale causato il proprietario va disabilitato.

Come il sistema crea la finestra di dialogo modale, e invia il messaggio WM_CANCELMODE alla finestra (se presente) attualmente catturando input del mouse. Un'applicazione che riceve questo messaggio deve rilasciare il mouse capture in modo che l'utente può muovere il mouse nella finestra di dialogo modale. Perché il sistema Disattiva finestra proprietaria, tutti input del mouse viene persa se il proprietario non riesce a rilasciare il mouse dopo aver ricevuto questo messaggio.

Per elaborare i messaggi per la finestra di dialogo modale, il sistema inizia il proprio ciclo di messaggi, prendendo il controllo temporaneo della coda di messaggi per l'intera applicazione. Quando il sistema recupera un messaggio che non è esplicitamente per la finestra di dialogo, invia il messaggio alla finestra appropriato. Se recupera un messaggio WM_QUIT , esso post il messaggio torna a coda di messaggi dell'applicazione affinché il ciclo di messaggi principale dell'applicazione può recuperare alla fine del messaggio.

Ogni volta che la coda del messaggio di applicazione è vuota, il sistema invia il messaggio WM_ENTERIDLE alla finestra del proprietario. L'applicazione può utilizzare questo messaggio per svolgere un compito di sfondo mentre la finestra di dialogo rimane sullo schermo. Quando un'applicazione utilizza il messaggio in questo modo, l'applicazione deve cedere frequentemente controllo (ad esempio, utilizzando la funzione PeekMessage ) così che la finestra di dialogo modale è in grado di ricevere qualsiasi input dell'utente. Per impedire la finestra di dialogo modale di trasmettere i messaggi WM_ENTERIDLE, l'applicazione può specificare lo stile DS_NOIDLEMSG quando si crea la finestra di dialogo.

Un'applicazione distrugge una finestra di dialogo modale utilizzando la funzione EndDialog . Nella maggior parte dei casi, la procedura di casella di dialogo chiama EndDialog quando l'utente sceglie il comando Chiudi dal menu della finestra di dialogo del sistema o si sceglie il pulsante OK o su Annulla nella finestra di dialogo. Nella finestra di dialogo può restituire un valore tramite la funzione DialogBox (o altre funzioni di creazione) specificando un valore quando si chiama la funzione EndDialog . Il sistema restituisce questo valore dopo aver distrutto la finestra di dialogo. La maggior parte delle applicazioni utilizzano il valore restituito per determinare se la finestra di dialogo completato con successo il suo compito o è stata annullata dall'utente. Il sistema non restituire il controllo dalla funzione che crea la finestra di dialogo fino a quando la procedura di casella di dialogo ha chiamato la funzione EndDialog.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index