Finestre di dialogo non modali

Una finestra di dialogo non modali dovrebbe essere una finestra popup, avendo un menu di sistema, una barra del titolo e un bordo sottile; cioè, il modello di finestra di dialogo dovrebbe specificare gli stili WS_POPUP, WS_CAPTION, WS_BORDER e WS_SYSMENU. Il sistema non non visualizzato automaticamente nella finestra di dialogo, a meno che il modello specifica lo stile WS_VISIBLE.

Un'applicazione crea una finestra di dialogo non modali utilizzando la funzione CreateDialog o CreateDialogIndirect . CreateDialog richiede il nome o l'identificatore di una risorsa che contiene un modello di finestra di dialogo; CreateDialogIndirect richiede il manico di un oggetto di memoria contenente un modello di finestra di dialogo. Altre due funzioni, CreateDialogParam e CreateDialogIndirectParam, anche creare finestre di dialogo non modali; si passa un parametro specificato alla procedura di dialogo casella quando viene creata la finestra di dialogo.

CreateDialog e altre funzioni di creazione restituiscano un handle di finestra per la finestra di dialogo. L'applicazione e la procedura di casella di dialogo possibile utilizzare questo handle per gestire la finestra di dialogo. Ad esempio, se il modello di finestra di dialogo WS_VISIBLE non è specificato, l'applicazione può visualizzare nella finestra di dialogo passando l'handle di finestra la funzione ShowWindow.

Una finestra di dialogo non modali disabilita la finestra proprietaria né invia messaggi ad esso. Quando si crea la finestra di dialogo, il sistema rende la finestra attiva, ma l'utente o l'applicazione può cambiare la finestra attiva in qualsiasi momento. Se nella finestra di dialogo diventano inattiva, rimane sopra la finestra proprietario nell'ordine Z, anche se è attiva la finestra del proprietario.

L'applicazione è responsabile per il recupero e l'invio dei messaggi di input alla finestra di dialogo. La maggior parte delle applicazioni utilizzano il ciclo di messaggi principale per questo. Per consentire all'utente di spostarsi a e selezionare i controlli mediante la tastiera, tuttavia, l'applicazione deve chiamare la funzione IsDialogMessage . Per ulteriori informazioni su questa funzione, vedere Finestra di dialogo casella Keyboard Interface.

Una finestra di dialogo non modali non può restituire un valore all'applicazione come una finestra di dialogo modale fa, ma la procedura di casella di dialogo è in grado di inviare informazioni alla finestra proprietario utilizzando la funzione SendMessage.

Un'applicazione deve distruggere tutte le finestre di dialogo non modali prima di terminare. Può distruggere una finestra di dialogo non modali utilizzando la funzione DestroyWindow . Nella maggior parte dei casi, la procedura di casella di dialogo chiama DestroyWindow in risposta all'input dell'utente, come ad esempio scegliendo il pulsante Annulla. Se l'utente non chiude mai nella finestra di dialogo in questo modo, l'applicazione deve chiamare DestroyWindow.

DestroyWindow invalida l'handle di finestra per la finestra di dialogo in modo eventuali successive chiamate a funzioni che utilizzano l'handle restituiranno valori di errore. Per evitare errori, la procedura di casella di dialogo dovrà notificare il proprietario che il dialogo sia stato distrutto. Molte applicazioni mantengono una variabile globale che contiene l'handle di finestra di dialogo. Quando la procedura di finestra di dialogo Elimina nella finestra di dialogo, imposta anche la variabile globale su NULL, che indica che la finestra di dialogo è non più valido.

La procedura di casella di dialogo non deve chiamare la funzione EndDialog per distruggere una finestra di dialogo non modali.

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

Index