Modelli personalizzati di tipo Esplora risorse

Per definire i controlli aggiuntivi per un dialogo aperto tipo Esplora risorse o Salva con nome , utilizzare la struttura OPENFILENAME per specificare un modello per una finestra di dialogo bambino che contiene i controlli supplementari. Se il modello di finestra di dialogo del bambino è una risorsa in un'applicazione o una libreria a collegamento dinamico, impostare il flag OFN_ENABLETEMPLATE nel membro flag e utilizzare i membri hInstance e lpTemplateName della struttura per identificare il nome del modulo e risorsa. Se il modello è già in memoria, impostare il flag OFN_ENABLETEMPLATEHANDLE e utilizzare il membro hInstance per identificare l'oggetto di memoria che contiene il modello. Quando fornendo un bambino modello di dialogo per una finestra di dialogo tipo Esplora risorse, è inoltre necessario impostare il flag OFN_EXPLORER; in caso contrario, il sistema si presuppone che si sta fornendo un modello di sostituzione per un vecchio stile di dialogo. In genere, quando si forniscono ulteriori controlli, deve inoltre fornire un Esploratore-stile gancio procedura per elaborare i messaggi per i nuovi controlli.

È possibile creare il vostro modello di finestra di dialogo di bambino come si fa a qualsiasi altro modello, solo che è necessario specificare gli stili WS_CHILD e WS_CLIPSIBLINGS e deve specificare gli stili DS_3DLOOK e DS_CONTROL. Il sistema richiede lo stile WS_CHILD, perché il modello definisce una finestra di dialogo bambino predefinito Apri o Salva con nome nella finestra di dialogo. Lo stile WS_CLIPSIBLINGS assicura che la finestra di dialogo bambino non dipinge su uno qualsiasi dei controlli nella finestra di dialogo predefinita. Lo stile DS_3DLOOK fa in modo che l'aspetto dei controlli nella finestra di dialogo bambino sia coerenza con i controlli nella finestra di dialogo predefinita. Lo stile DS_CONTROL fa in modo che l'utente può utilizzare la scheda e altri tasti di navigazione per spostarsi tra tutti i controlli, predefinito o personalizzato, nella finestra di dialogo personalizzata.

Per fare spazio ai nuovi controlli, il sistema si espande nella finestra di dialogo predefinita dalla larghezza e l'altezza della finestra di dialogo personalizzata. Per impostazione predefinita, tutti i controlli nella finestra di dialogo personalizzata sono posizionati sotto i controlli nella finestra di dialogo predefinita. Tuttavia, è possibile ignorare questa impostazione predefinita di posizionamento tra cui un controllo di testo statico nel vostro modello di finestra di dialogo personalizzate e assegnandovi il valore dell'identificatore del controllo di stc32. (Questo valore è definito nella DLG.File di intestazione H.) In questo caso, il sistema utilizza il controllo come punto di riferimento per determinare dove posizionare i nuovi controlli. Tutti i nuovi controlli di sopra e a sinistra del controllo stc32 sono posizionati la stessa quantità di sopra e a sinistra dei controlli nella finestra di dialogo predefinita. Nuovi controlli di sotto e a destra del controllo stc32 sono posizionati di sotto e a destra dei controlli predefiniti. In generale, ogni nuovo controllo è posizionato in modo che esso ha la stessa posizione rispetto ai controlli predefiniti come dovuto il controllo stc32. Per fare spazio a questi nuovi controlli, il sistema aggiunge lo spazio per la sinistra, destra, inferiore e superiore della finestra di dialogo predefinita come stato necessario.

Il sistema richiede la routine di hook per elaborare tutti i messaggi destinati alla finestra di dialogo personalizzata e quindi invia i messaggi della finestra stessa alla procedura gancio come per qualsiasi altra procedura di dialogo casella. Ad esempio, la routine di hook riceve messaggi WM_COMMAND , quando l'utente fa clic sui controlli pulsante nella finestra di dialogo personalizzata. La routine di hook è responsabile per l'inizializzazione di questi controlli e il recupero di valori dai controlli quando viene chiusa la finestra di dialogo. Si noti che quando la routine di hook riceve il messaggio WM_INITDIALOG , il sistema è non ancora spostato i controlli alla loro posizione finale.

La procedura di casella di dialogo predefinita gestisce i messaggi per tutti i controlli nella finestra di dialogo predefinita, ma la routine di hook riceve la WM_NOTIFY i messaggi di notifica per le azioni dell'utente su questi controlli come descritto nelle Procedure di gancio di tipo Esplora risorse.