Finestre di dialogo personalizzate

Un'applicazione può creare finestre di dialogo personalizzate utilizzando una classe di finestra definito dall'applicazione per le finestre di dialogo invece di utilizzare la classe box di dialogo predefinite. Applicazioni in genere utilizzano questo metodo quando una finestra di dialogo è loro finestra principale, ma è anche utile per la creazione di finestre di dialogo modali e non modali per applicazioni che hanno windows standard sovrapposti.

Classe window definiti dall'applicazione consente all'applicazione di definire una routine della finestra per i messaggi di box e processo di dialogo prima di inviarli alla procedura di casella di dialogo. Esso consente anche l'applicazione definire un'icona di classe, un pennello di sfondo di classe e un menu di classe per la finestra di dialogo. L'applicazione deve registrare la classe finestra prima di tentare di creare una dialogo e deve fornire il modello di finestra di dialogo con il valore di atomo o il nome della classe window.

Molte applicazioni per creare una nuova classe di finestra di dialogo casella prima recuperando le informazioni di classe per la classe box di dialogo predefiniti e passando alla funzione basare , che riempie una struttura WNDCLASS con le informazioni. L'applicazione modifica i singoli membri della struttura, come ad esempio il nome della classe, pennello e icona, quindi registra la nuova classe mediante la funzione RegisterClass . Se un'applicazione riempie la struttura WNDCLASS per sé, deve impostare il membro cbWndExtra su DLGWINDOWEXTRA, ovvero il numero di byte supplementari, che il sistema richiede per ogni finestra di dialogo. Se un'applicazione utilizza anche extra byte per ogni finestra di dialogo, devono essere di là i byte supplementari richiesti dal sistema.

La routine di finestra per la finestra di dialogo personalizzata ha gli stessi parametri e requisiti come qualsiasi altra procedura di finestra. A differenza di altre procedure di finestra, tuttavia, la routine di finestra per questa dialogo deve chiamare la funzione di DefDlgProc anziché la funzione DefWindowProc per i messaggi che non elabora. DefDlgProc effettua lo stesso messaggio predefinito di elaborazione come la routine di finestra per la finestra di dialogo predefinite, che comprende chiamando la routine della finestra di dialogo.

Un'applicazione può anche creare finestre di dialogo personalizzate da sottoclassi la routine della finestra di dialogo predefinite. La funzione SetWindowLong consente a un'applicazione impostare l'indirizzo di una routine di finestra per una determinata finestra. L'applicazione può anche tentare sottoclasse utilizzando la funzione SetClassLong , ma facendo così colpisce tutte le finestre di dialogo del sistema, non solo quelli che appartiene all'applicazione.

Applicazioni che creano finestre di dialogo personalizzate a volte forniscono un'interfaccia tastiera alternativo per le finestre di dialogo. Per le finestre di dialogo non modali, questo può significare l'applicazione non chiama la funzione IsDialogMessage e invece elabora tutti gli input da tastiera nella procedura di finestra personalizzata. In tali casi, l'applicazione può utilizzare il messaggio WM_NEXTDLGCTL per ridurre al minimo il codice necessario per spostare lo stato attivo per l'input da un controllo a un altro. Questo messaggio, quando viene passato al DefDlgProc, si sposta lo stato attivo per l'input su un controllo specificato e aggiorna l'aspetto dei controlli, come ad esempio lo spostamento al confine di premere il pulsante predefinito o l'impostazione di un pulsante di opzione automatica.