La macro DialogBoxIndirect crea una finestra di dialogo modale da un modello di finestra di dialogo in memoria. DialogBoxIndirect non restituisce il controllo fino a quando la funzione di callback specificato termina nella finestra di dialogo modale chiamando la funzione EndDialog . La macro DialogBoxIndirect viene utilizzata la funzione DialogBoxIndirectParam.
int (DialogBoxIndirect HINSTANCE , hInstance, / / handle all'istanza dell'applicazioneLPDLGTEMPLATElpTemplate, / / identifica il modello di finestra di dialogoHWNDhWndParent, / / handle di finestra proprietariaDLGPROClpDialogFunc / / puntatore alla finestra di dialogo scatola procedura);
In un modello standard per un dialogo, l'intestazione è una struttura DLGTEMPLATE seguita da ulteriori matrici a lunghezza variabile. I dati per ciascun controllo è costituito da una struttura DLGITEMTEMPLATE seguita da ulteriori matrici a lunghezza variabile.
In un modello esteso per un dialogo, l'intestazione utilizza il formato DLGTEMPLATEEX e le definizioni di controllo utilizzano il formato DLGITEMTEMPLATEEX.
Se la funzione ha esito positivo, il valore restituito è il parametro nResult specificato nella chiamata alla funzione EndDialog utilizzato per chiudere la finestra di dialogo.
Se la funzione ha esito negativo, il valore restituito è – 1. Per ottenere informazioni di errore estese, chiamare GetLastError.
La macro DialogBoxIndirect utilizza la funzione CreateWindowEx per creare la finestra di dialogo. DialogBoxIndirect quindi invia un messaggio WM_INITDIALOG la procedura di casella di dialogo. Se il modello specifica lo stile DS_SETFONT, la funzione invia anche un messaggio WM_SETFONT alla procedura di casella di dialogo. La funzione viene visualizzata la finestra di dialogo (a prescindere dal fatto se il modello specifica lo stile WS_VISIBLE), disattiva la finestra proprietaria e inizia il proprio ciclo di messaggi per recuperare e spedire messaggi per la finestra di dialogo.
Quando la procedura di casella di dialogo chiama la funzione EndDialog , DialogBoxIndirect distrugge la finestra di dialogo, termina il ciclo di messaggi, consente la finestra proprietaria (se abilitato in precedenza) e restituisce il parametro nResult specificato dalla procedura di dialogo casella quando chiamato EndDialog.
In un modello di finestra di dialogo standard, la struttura DLGTEMPLATE e ciascuna delle strutture DLGITEMTEMPLATE deve essere allineati ai limiti DWORD . La matrice di dati di creazione che segue una struttura DLGITEMTEMPLATE deve anche essere allineata su un confine DWORD . Tutte le altre matrici di lunghezza variabile nel modello deve deve essere allineate limiti a parole.
In un modello di casella di dialogo esteso, l'intestazione DLGTEMPLATEEX e ognuna delle definizioni del controllo DLGITEMTEMPLATEEX deve essere allineati ai limiti DWORD . La creazione matrice di dati, se presente, che segue una struttura DLGITEMTEMPLATEEX deve essere allineato su un confine DWORD . Tutte le altre matrici di lunghezza variabile nel modello devono essere allineati secondo limiti a WORD.
Tutte le stringhe di caratteri nel modello casella di dialogo, come ad esempio i titoli per la finestra di dialogo e pulsanti, devono essere stringhe Unicode. Per creare codice che funziona su Windows e Windows NT, utilizzare la funzione MultiByteToWideChar per generare queste stringhe Unicode.
Windows 95 e più tardi:Il sistema può supportare un massimo di 255 controlli al modello di finestra di dialogo. Per inserire più di 255 controlli in una finestra di dialogo, creare i controlli nel gestore dei messaggi WM_INITDIALOG anziché collocarli nel modello.
Windows CE: Non tutti gli stili sono supportati nella struttura DLGTEMPLATE nel modello di dialogo cui fa riferimento il parametro lpTemplate . .
nbsp; Windows &NT: richiede 3.1 o versione successiva.
Windows:Richiede Windows 95 o versioni successive.
Windows CE:Richiede la versione 1.0 o successiva.
Intestazione:Dichiarati in winuser.
Importare librerie:Utilizzare user32.lib.
Unicode:Implementato come versioni Unicode e ANSI su Windows NT.
Panoramica di finestre di dialogo, finestra di dialogo casella funzioni, CreateWindowEx, DialogBox, DialogBoxIndirectParam, DialogBoxParam, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE, DLGTEMPLATEEX, EndDialog, MultiByteToWideChar, WM_INITDIALOG, WM_SETFONT
Rimedio: Inserire il CD-ROM CD di MSDN Library.