Classe CDialog
Classe di base utilizzata per la visualizzazione delle finestre di dialogo sullo schermo.
Sintassi
class CDialog : public CWnd
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CDialog::CDialog | Costruisce un oggetto CDialog . |
Metodi pubblici
Nome | Descrizione |
---|---|
CDialog::Create | Inizializza l'oggetto CDialog . Crea una finestra di dialogo senza modalità e la collega all'oggetto CDialog . |
CDialog::CreateIndirect | Crea una finestra di dialogo senza modalità da un modello di finestra di dialogo in memoria (non basato su risorse). |
CDialog::D oModal | Chiama una finestra di dialogo modale e restituisce al termine. |
CDialog::EndDialog | Chiude una finestra di dialogo modale. |
CDialog::GetDefID | Ottiene l'ID del controllo pushbutton predefinito per una finestra di dialogo. |
CDialog::GotoDlgCtrl | Sposta lo stato attivo su un controllo della finestra di dialogo specificato nella finestra di dialogo. |
CDialog::InitModalIndirect | Crea una finestra di dialogo modale da un modello di finestra di dialogo in memoria (non basato sulle risorse). I parametri vengono archiviati fino a quando non viene chiamata la funzione DoModal . |
CDialog::MapDialogRect | Converte le unità di finestra di dialogo di un rettangolo in unità schermo. |
CDialog::NextDlgCtrl | Sposta lo stato attivo sul controllo successivo della finestra di dialogo nella finestra di dialogo. |
CDialog::OnInitDialog | Eseguire l'override per aumentare l'inizializzazione della finestra di dialogo. |
CDialog::OnSetFont | Eseguire l'override per specificare il tipo di carattere che un controllo finestra di dialogo deve utilizzare quando disegna testo. |
CDialog::P revDlgCtrl | Sposta lo stato attivo sul controllo precedente della finestra di dialogo nella finestra di dialogo. |
CDialog::SetDefID | Modifica il controllo pushbutton predefinito per una finestra di dialogo in un pulsante di push specificato. |
CDialog::SetHelpID | Imposta un ID guida sensibile al contesto per la finestra di dialogo. |
Metodi protetti
Nome | Descrizione |
---|---|
CDialog::OnCancel | Eseguire l'override per eseguire l'azione Annulla pulsante o ESC. Il valore predefinito chiude la finestra di dialogo e DoModal restituisce IDCANCEL. |
CDialog::OnOK | Eseguire l'override per eseguire l'azione del pulsante OK in una finestra di dialogo modale. Il valore predefinito chiude la finestra di dialogo e DoModal restituisce IDOK. |
Osservazioni:
Le finestre di dialogo sono di due tipi: modale e modeless. Prima che l'applicazione continui, è necessario chiudere una finestra di dialogo modale. Una finestra di dialogo senza modalità consente all'utente di visualizzare la finestra di dialogo e tornare a un'altra attività senza annullare o rimuovere la finestra di dialogo.
Un CDialog
oggetto è una combinazione di un modello di dialogo e di una CDialog
classe derivata da . Usare l'editor della finestra di dialogo per creare il modello di finestra di dialogo e archiviarlo in una risorsa, quindi usare la procedura guidata Aggiungi classe per creare una classe derivata da CDialog
.
Una finestra di dialogo, come qualsiasi altra finestra, riceve messaggi da Windows. In una finestra di dialogo, si è particolarmente interessati a gestire i messaggi di notifica dai controlli della finestra di dialogo, poiché è così che l'utente interagisce con la finestra di dialogo. Utilizzare la Creazione guidata classi per selezionare i messaggi che si desidera gestire e aggiungerà automaticamente le voci appropriate della mappa messaggi e le funzioni membro del gestore di messaggi alla classe . È sufficiente scrivere codice specifico dell'applicazione nelle funzioni membro del gestore.
Se si preferisce, è sempre possibile scrivere manualmente voci e funzioni membro della mappa messaggi.
Nella finestra di dialogo più semplice, tuttavia, si aggiungono variabili membro alla classe di dialogo derivata per archiviare i dati immessi nei controlli della finestra di dialogo da parte dell'utente o per visualizzare i dati per l'utente. È possibile usare la procedura guidata Aggiungi variabile per creare variabili membro e associarle ai controlli. Allo stesso tempo, si sceglie un tipo di variabile e l'intervallo di valori consentiti per ogni variabile. La procedura guidata per il codice aggiunge le variabili membro alla classe del dialogo derivata.
Viene generata una mappa dati per gestire automaticamente lo scambio di dati tra le variabili membro e i controlli della finestra di dialogo. La mappa dati fornisce funzioni che inizializzano i controlli nella finestra di dialogo con i valori appropriati, recuperano i dati e convalidano i dati.
Per creare una finestra di dialogo modale, creare un oggetto nello stack usando il costruttore per la classe di dialogo derivata e quindi chiamare DoModal
per creare la finestra di dialogo e i relativi controlli. Se si desidera creare un dialogo senza modalità, chiamare Create
nel costruttore della classe del dialogo.
È anche possibile creare un modello in memoria usando una struttura di dati DLGTEMPLATE come descritto in Windows SDK. Dopo aver creato un CDialog
oggetto, chiamare CreateIndirect per creare una finestra di dialogo senza modalità oppure chiamare InitModalIndirect e DoModal per creare una finestra di dialogo modale.
La mappa dei dati di scambio e convalida viene scritta in un override di CWnd::DoDataExchange
che viene aggiunto alla nuova classe del dialogo. Per altre informazioni sulla funzionalità di scambio e convalida, vedere la funzione membro DoDataExchange in CWnd
.
Sia il programmatore che il framework chiamano DoDataExchange
indirettamente tramite una chiamata a CWnd::UpdateData.
Il framework chiama UpdateData
quando l'utente fa clic sul pulsante OK per chiudere una finestra di dialogo modale. I dati non vengono recuperati se si fa clic sul pulsante Annulla. L'implementazione predefinita di OnInitDialog chiama UpdateData
anche per impostare i valori iniziali dei controlli. In genere si esegue l'override OnInitDialog
per inizializzare ulteriormente i controlli. OnInitDialog
viene chiamato dopo la creazione di tutti i controlli della finestra di dialogo e subito prima della visualizzazione della finestra di dialogo.
È possibile chiamare CWnd::UpdateData
in qualsiasi momento durante l'esecuzione di una finestra di dialogo modale o senza modalità.
Se si sviluppa manualmente una finestra di dialogo, si aggiungono manualmente le variabili membro necessarie alla classe della finestra di dialogo derivata e si aggiungono funzioni membro per impostare o ottenere questi valori.
Una finestra di dialogo modale si chiude automaticamente quando l'utente preme i pulsanti OK o Annulla o quando il codice chiama la EndDialog
funzione membro.
Quando si implementa una finestra di dialogo senza modalità, eseguire sempre l'override della OnCancel
funzione membro e chiamare DestroyWindow
dall'interno di essa. Non chiamare la classe CDialog::OnCancel
di base , perché chiama EndDialog
, che renderà invisibile la finestra di dialogo, ma non lo distruggerà. È anche consigliabile eseguire l'override PostNcDestroy
per le finestre di dialogo senza modalità per eliminare this
, poiché le finestre di dialogo senza modalità vengono in genere allocate con new
. Le finestre di dialogo modali vengono in genere costruite sul frame e non richiedono la PostNcDestroy
pulizia.
Per altre informazioni su CDialog
, vedere Finestre di dialogo.
Gerarchia di ereditarietà
CDialog
Requisiti
Intestazione: afxwin.h
CDialog::CDialog
Per costruire una finestra di dialogo modale basata su risorse, chiamare una forma pubblica del costruttore.
explicit CDialog(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
explicit CDialog(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
CDialog();
Parametri
lpszTemplateName
Contiene una stringa con terminazione Null che corrisponde al nome di una risorsa modello di finestra di dialogo.
nIDTemplate
Contiene il numero ID di una risorsa modello di finestra di dialogo.
pParentWnd
Punta all'oggetto finestra padre o proprietario (di tipo CWnd) a cui appartiene l'oggetto dialog. Se è NULL, la finestra padre dell'oggetto finestra di dialogo viene impostata sulla finestra principale dell'applicazione.
Osservazioni:
Una forma del costruttore consente di accedere alla risorsa della finestra di dialogo in base al nome del modello. L'altro costruttore fornisce l'accesso in base al numero ID modello, in genere con un prefisso IDD_ (ad esempio, IDD_DIALOG1).
Per costruire una finestra di dialogo modale da un modello in memoria, richiamare prima il costruttore senza parametri, protetto e quindi chiamare InitModalIndirect
.
Dopo aver creato una finestra di dialogo modale con uno dei metodi precedenti, chiamare DoModal
.
Per costruire una finestra di dialogo senza modalità, utilizzare il formato protetto del CDialog
costruttore. Il costruttore è protetto perché è necessario derivare la propria classe della finestra di dialogo per implementare una finestra di dialogo senza modalità. La costruzione di una finestra di dialogo senza modalità è un processo in due passaggi. Chiamare prima il costruttore; chiamare quindi la Create
funzione membro per creare una finestra di dialogo basata su risorse o chiamare CreateIndirect
per creare la finestra di dialogo da un modello in memoria.
CDialog::Create
Chiamare Create
per creare una finestra di dialogo senza modalità usando un modello di finestra di dialogo da una risorsa.
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL);
virtual BOOL Create(
UINT nIDTemplate,
CWnd* pParentWnd = NULL);
Parametri
lpszTemplateName
Contiene una stringa con terminazione Null che corrisponde al nome di una risorsa modello di finestra di dialogo.
pParentWnd
Punta all'oggetto finestra padre (di tipo CWnd) a cui appartiene l'oggetto dialog. Se è NULL, la finestra padre dell'oggetto finestra di dialogo viene impostata sulla finestra principale dell'applicazione.
nIDTemplate
Contiene il numero ID di una risorsa modello di finestra di dialogo.
Valore restituito
Entrambi i moduli restituiscono un valore diverso da zero se la creazione e l'inizializzazione della finestra di dialogo hanno avuto esito positivo; in caso contrario, 0.
Osservazioni:
È possibile inserire la chiamata a Create
all'interno del costruttore o chiamarla dopo che il costruttore viene richiamato.
Per accedere alla risorsa modello della finestra di dialogo sono disponibili due forme della Create
funzione membro, ad esempio IDD_DIALOG1.
Per entrambe le forme, passare un puntatore all'oggetto finestra padre. Se pParentWnd è NULL, la finestra di dialogo verrà creata con la relativa finestra padre o proprietario impostata sulla finestra principale dell'applicazione.
La Create
funzione membro restituisce immediatamente dopo la creazione della finestra di dialogo.
Usare lo stile WS_VISIBLE nel modello della finestra di dialogo se la finestra di dialogo deve essere visualizzata quando viene creata la finestra padre. In caso contrario, è necessario chiamare ShowWindow
. Per altri stili di finestra di dialogo e la relativa applicazione, vedi la struttura DLGTEMPLATE in Windows SDK e stili di finestra nel riferimento MFC.
Usare la CWnd::DestroyWindow
funzione per eliminare definitivamente una finestra di dialogo creata dalla Create
funzione .
Esempio
void CMyDialog::OnMenuShowSimpleDialog()
{
//m_pSimpleDialog initialized to NULL in the constructor of CMyDialog class
m_pSimpleDlg = new CSimpleDlg();
//Check if new succeeded and we got a valid pointer to a dialog object
if (m_pSimpleDlg != NULL)
{
BOOL ret = m_pSimpleDlg->Create(IDD_SIMPLEDIALOG, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pSimpleDlg->ShowWindow(SW_SHOW);
}
else
{
AfxMessageBox(_T("Error Creating Dialog Object"));
}
}
CDialog::CreateIndirect
Chiamare questa funzione membro per creare una finestra di dialogo senza modalità da un modello di finestra di dialogo in memoria.
virtual BOOL CreateIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
virtual BOOL CreateIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
Parametri
lpDialogTemplate
Punta alla memoria contenente un modello di finestra di dialogo usato per creare la finestra di dialogo. Questo modello è sotto forma di una struttura DLGTEMPLATE e informazioni di controllo, come descritto in Windows SDK.
pParentWnd
Punta all'oggetto finestra padre dell'oggetto dialog (di tipo CWnd). Se è NULL, la finestra padre dell'oggetto finestra di dialogo viene impostata sulla finestra principale dell'applicazione.
lpDialogInit
Punta a una risorsa DLGINIT.
hDialogTemplate
Contiene un handle per la memoria globale contenente un modello di finestra di dialogo. Questo modello è sotto forma di struttura DLGTEMPLATE
e dati per ogni controllo nella finestra di dialogo.
Valore restituito
Diverso da zero se la finestra di dialogo è stata creata e inizializzata correttamente; in caso contrario, 0.
Osservazioni:
La CreateIndirect
funzione membro restituisce immediatamente dopo la creazione della finestra di dialogo.
Usare lo stile WS_VISIBLE nel modello della finestra di dialogo se la finestra di dialogo deve essere visualizzata quando viene creata la finestra padre. In caso contrario, è necessario chiamare ShowWindow
per fare in modo che venga visualizzato. Per altre informazioni su come specificare altri stili di finestra di dialogo nel modello, vedere la struttura DLGTEMPLATE in Windows SDK.
Usare la CWnd::DestroyWindow
funzione per eliminare definitivamente una finestra di dialogo creata dalla CreateIndirect
funzione .
Le finestre di dialogo che contengono controlli ActiveX richiedono informazioni aggiuntive fornite in una risorsa DLGINIT.
CDialog::D oModal
Chiamare questa funzione membro per richiamare la finestra di dialogo modale e restituire il risultato della finestra di dialogo al termine.
virtual INT_PTR DoModal();
Valore restituito
Valore int
che specifica il valore del parametro nResult passato alla funzione membro CDialog::EndDialog , utilizzata per chiudere la finestra di dialogo. Il valore restituito è -1 se la funzione non è riuscita a creare la finestra di dialogo o IDABORT se si è verificato un altro errore, nel qual caso la finestra di output conterrà informazioni sull'errore da GetLastError.
Osservazioni:
Questa funzione membro gestisce tutte le interazioni con l'utente mentre la finestra di dialogo è attiva. Questo è ciò che rende modale la finestra di dialogo; ovvero, l'utente non può interagire con altre finestre finché la finestra di dialogo non viene chiusa.
Se l'utente fa clic su uno dei pulsanti di scelta rapida nella finestra di dialogo, ad esempio OK o Annulla, viene chiamata una funzione membro del gestore messaggi, ad esempio OnOK o OnCancel, per tentare di chiudere la finestra di dialogo. La funzione membro predefinita OnOK
convaliderà e aggiornerà i dati della finestra di dialogo e chiuderà la finestra di dialogo con IDOK risultato e la funzione membro predefinita OnCancel
chiuderà la finestra di dialogo con IDCANCEL risultato senza convalidare o aggiornare i dati della finestra di dialogo. È possibile eseguire l'override di queste funzioni del gestore di messaggi per modificarne il comportamento.
Nota
PreTranslateMessage
viene ora chiamato per l'elaborazione dei messaggi della finestra di dialogo modale.
Esempio
void CMyDialog::OnMenuShowAboutDialog()
{
// Construct the dialog box passing the
// ID of the dialog template resource
CDialog aboutDlg(IDD_ABOUTBOX);
// Create and show the dialog box
INT_PTR nRet = -1;
nRet = aboutDlg.DoModal();
// Handle the return value from DoModal
switch (nRet)
{
case -1:
AfxMessageBox(_T("Dialog box could not be created!"));
break;
case IDABORT:
// Do something
break;
case IDOK:
// Do something
break;
case IDCANCEL:
// Do something
break;
default:
// Do something
break;
};
}
CDialog::EndDialog
Chiamare questa funzione membro per terminare una finestra di dialogo modale.
void EndDialog(int nResult);
Parametri
nResult
Contiene il valore da restituire dalla finestra di dialogo al chiamante di DoModal
.
Osservazioni:
Questa funzione membro restituisce nResult come valore restituito di DoModal
. È necessario usare la funzione per completare l'elaborazione EndDialog
ogni volta che viene creata una finestra di dialogo modale.
È possibile chiamare EndDialog
in qualsiasi momento, anche in OnInitDialog, nel qual caso è necessario chiudere la finestra di dialogo prima che venga visualizzata o prima che venga impostato lo stato attivo di input.
EndDialog
non chiude immediatamente la finestra di dialogo. Imposta invece un flag che indirizza la finestra di dialogo alla chiusura non appena viene restituito il gestore di messaggi corrente.
Esempio
void CMyDialog::OnMenuShowSimpleModal()
{
CSimpleDlg myDlg;
INT_PTR nRet = myDlg.DoModal();
if (nRet == IDOK || nRet == 5)
{
AfxMessageBox(_T("Dialog closed successfully"));
}
}
void CSimpleDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(nFlags);
// Do something
int nRet = point.x; // Just any value would do!
EndDialog(nRet); // This value is returned by DoModal!
// Do something
return; // Dialog closed and DoModal returns only here!
}
CDialog::GetDefID
Chiamare la GetDefID
funzione membro per ottenere l'ID del controllo pushbutton predefinito per una finestra di dialogo.
DWORD GetDefID() const;
Valore restituito
Valore a 32 bit ( DWORD
). Se il pushbutton predefinito ha un valore ID, la parola di ordine elevato contiene DC_HASDEFID e la parola con ordine basso contiene il valore ID. Se il pushbutton predefinito non ha un valore ID, il valore restituito è 0.
Osservazioni:
Si tratta in genere di un pulsante OK.
CDialog::GotoDlgCtrl
Sposta lo stato attivo sul controllo specificato nella finestra di dialogo.
void GotoDlgCtrl(CWnd* pWndCtrl);
Parametri
pWndCtrl
Identifica la finestra (controllo) che deve ricevere lo stato attivo.
Osservazioni:
Per ottenere un puntatore al controllo (finestra figlio) da passare come pWndCtrl, chiamare la CWnd::GetDlgItem
funzione membro, che restituisce un puntatore a un oggetto CWnd.
Esempio
Vedere l'esempio per CWnd::GetDlgItem.
CDialog::InitModalIndirect
Chiamare questa funzione membro per inizializzare un oggetto finestra di dialogo modale usando un modello di finestra di dialogo costruito in memoria.
BOOL InitModalIndirect(
LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL InitModalIndirect(
HGLOBAL hDialogTemplate,
CWnd* pParentWnd = NULL);
Parametri
lpDialogTemplate
Punta alla memoria contenente un modello di finestra di dialogo usato per creare la finestra di dialogo. Questo modello è sotto forma di una struttura DLGTEMPLATE e informazioni di controllo, come descritto in Windows SDK.
hDialogTemplate
Contiene un handle per la memoria globale contenente un modello di finestra di dialogo. Questo modello è sotto forma di struttura DLGTEMPLATE
e dati per ogni controllo nella finestra di dialogo.
pParentWnd
Punta all'oggetto finestra padre o proprietario (di tipo CWnd) a cui appartiene l'oggetto dialog. Se è NULL, la finestra padre dell'oggetto finestra di dialogo viene impostata sulla finestra principale dell'applicazione.
lpDialogInit
Punta a una risorsa DLGINIT.
Valore restituito
Diverso da zero se l'oggetto dialogo è stato creato e inizializzato correttamente; in caso contrario, 0.
Osservazioni:
Per creare una finestra di dialogo modale indirettamente, allocare innanzitutto un blocco globale di memoria e riempirlo con il modello della finestra di dialogo. Chiamare quindi il costruttore vuoto CDialog
per costruire l'oggetto finestra di dialogo. Chiamare InitModalIndirect
quindi per archiviare l'handle nel modello di finestra di dialogo in memoria. La finestra di dialogo Windows viene creata e visualizzata in un secondo momento, quando viene chiamata la funzione membro DoModal .
Le finestre di dialogo che contengono controlli ActiveX richiedono informazioni aggiuntive fornite in una risorsa DLGINIT.
CDialog::MapDialogRect
Chiamare per convertire le unità di finestra di dialogo di un rettangolo in unità schermo.
void MapDialogRect(LPRECT lpRect) const;
Parametri
lpRect
Punta a una struttura RECT o a un oggetto CRect che contiene le coordinate della finestra di dialogo da convertire.
Osservazioni:
Le unità di finestra di dialogo sono indicate in termini di unità base della finestra di dialogo corrente derivata dalla larghezza media e dall'altezza dei caratteri nel tipo di carattere utilizzato per il testo della finestra di dialogo. Un'unità orizzontale è un quarto dell'unità base della finestra di dialogo e un'unità verticale è un ottavo dell'unità di altezza di base della finestra di dialogo.
La GetDialogBaseUnits
funzione Windows restituisce informazioni sulle dimensioni per il tipo di carattere di sistema, ma è possibile specificare un tipo di carattere diverso per ogni finestra di dialogo se si utilizza lo stile DS_SETFONT nel file di definizione della risorsa. La MapDialogRect
funzione Windows utilizza il tipo di carattere appropriato per questa finestra di dialogo.
La MapDialogRect
funzione membro sostituisce le unità di dialogo in lpRect con unità schermo (pixel) in modo che il rettangolo possa essere usato per creare una finestra di dialogo o posizionare un controllo all'interno di una casella.
CDialog::NextDlgCtrl
Sposta lo stato attivo sul controllo successivo nella finestra di dialogo.
void NextDlgCtrl() const;
Osservazioni:
Se lo stato attivo si trova all'ultimo controllo nella finestra di dialogo, passa al primo controllo.
CDialog::OnCancel
Il framework chiama questo metodo quando l'utente fa clic su Annulla o preme il tasto ESC in una finestra di dialogo modale o senza modalità.
virtual void OnCancel();
Osservazioni:
Eseguire l'override di questo metodo per eseguire azioni, ad esempio il ripristino di dati obsoleti, quando un utente chiude la finestra di dialogo facendo clic su Annulla o premendo esc. Il valore predefinito chiude una finestra di dialogo modale chiamando EndDialog e causando la restituzione di IDCANCEL da Parte di DoModal .
Se si implementa il pulsante Annulla in una finestra di dialogo senza modalità, è necessario eseguire l'override del OnCancel
metodo e chiamare DestroyWindow all'interno di esso. Non chiamare il metodo della classe base, perché chiama EndDialog
, che renderà invisibile la finestra di dialogo, ma non distruggerla.
Nota
Non è possibile eseguire l'override di questo metodo quando si utilizza un CFileDialog
oggetto in un programma compilato in Windows XP. Per altre informazioni su CFileDialog
, vedere Classe CFileDialog.
Esempio
void CSimpleDlg::OnCancel()
{
// TODO: Add extra cleanup here
// Ensure that you reset all the values back to the
// ones before modification. This handler is called
// when the user doesn't want to save the changes.
if (AfxMessageBox(_T("Are you sure you want to abort the changes?"),
MB_YESNO) == IDNO)
{
// Give the user a chance if he has unknowingly hit the
// Cancel button. If he says No, return. Don't reset. If
// Yes, go ahead and reset the values and close the dialog.
return;
}
m_nMyValue = m_nPrevValue;
m_pMyString = NULL;
CDialog::OnCancel();
}
CDialog::OnInitDialog
Questo metodo viene chiamato in risposta al WM_INITDIALOG
messaggio.
virtual BOOL OnInitDialog();
Valore restituito
Specifica se l'applicazione ha impostato lo stato attivo sull'input su uno dei controlli nella finestra di dialogo. Se OnInitDialog
restituisce un valore diverso da zero, Windows imposta lo stato attivo sull'input sul percorso predefinito, ovvero il primo controllo nella finestra di dialogo. L'applicazione può restituire 0 solo se ha impostato in modo esplicito lo stato attivo sull'input su uno dei controlli nella finestra di dialogo.
Osservazioni:
Windows invia il WM_INITDIALOG
messaggio alla finestra di dialogo durante le chiamate Create, CreateIndirect o DoModal , che si verificano immediatamente prima della visualizzazione della finestra di dialogo.
Eseguire l'override di questo metodo se si desidera eseguire un'elaborazione speciale quando viene inizializzata la finestra di dialogo. Nella versione sottoposta a override chiamare prima la classe OnInitDialog
di base ma ignorarne il valore restituito. In genere si tornerà TRUE
dal metodo sottoposto a override.
Windows chiama la OnInitDialog
funzione usando la routine standard della finestra di dialogo globale comune a tutte le finestre di dialogo della libreria di classi di Microsoft Foundation. Non chiama questa funzione tramite la mappa messaggi e pertanto non è necessaria una voce della mappa messaggi per questo metodo.
Nota
Non è possibile eseguire l'override di questo metodo quando si utilizza un CFileDialog
oggetto in un programma compilato in Windows Vista o nei sistemi operativi successivi. Per altre informazioni sulle modifiche apportate a CFileDialog
in Windows Vista e versioni successive, vedere Classe CFileDialog.
Esempio
BOOL CSimpleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_cMyEdit.SetWindowText(_T("My Name")); // Initialize control values
m_cMyList.ShowWindow(SW_HIDE); // Show or hide a control, etc.
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
CDialog::OnOK
Viene chiamato quando l'utente fa clic sul pulsante OK (il pulsante con IDOK).
virtual void OnOK();
Osservazioni:
Eseguire l'override di questo metodo per eseguire azioni quando viene attivato il pulsante OK . Se la finestra di dialogo include la convalida e lo scambio automatico dei dati, l'implementazione predefinita di questo metodo convalida i dati della finestra di dialogo e aggiorna le variabili appropriate nell'applicazione.
Se si implementa il pulsante OK in una finestra di dialogo senza modalità, è necessario eseguire l'override del OnOK
metodo e chiamare DestroyWindow al suo interno. Non chiamare il metodo della classe base, perché chiama EndDialog che rende invisibile la finestra di dialogo, ma non lo elimina.
Nota
Non è possibile eseguire l'override di questo metodo quando si utilizza un CFileDialog
oggetto in un programma compilato in Windows XP. Per altre informazioni su CFileDialog
, vedere Classe CFileDialog.
Esempio
void CSimpleDlg::OnOK()
{
// TODO: Add extra validation here
// Ensure that your UI got the necessary input
// from the user before closing the dialog. The
// default OnOK will close this.
if (m_nMyValue == 0) // Is a particular field still empty?
{
// Inform the user that he can't close the dialog without
// entering the necessary values and don't close the
// dialog.
AfxMessageBox(_T("Please enter a value for MyValue"));
return;
}
CDialog::OnOK(); // This will close the dialog and DoModal will return.
}
CDialog::OnSetFont
Specifica il tipo di carattere che verrà utilizzato da un controllo finestra di dialogo durante il disegno del testo.
Virtual void OnSetFont(CFont* pFont);
Parametri
pFont
[in] Specifica un puntatore al tipo di carattere che verrà utilizzato come tipo di carattere predefinito per tutti i controlli in questa finestra di dialogo.
Osservazioni:
La finestra di dialogo userà il tipo di carattere specificato come predefinito per tutti i relativi controlli.
L'editor di dialoghi imposta in genere il tipo di carattere della finestra di dialogo come parte della risorsa modello della finestra di dialogo.
Nota
Non è possibile eseguire l'override di questo metodo quando si utilizza un CFileDialog
oggetto in un programma compilato in Windows Vista o nei sistemi operativi successivi. Per altre informazioni sulle modifiche apportate a CFileDialog
in Windows Vista e versioni successive, vedere Classe CFileDialog.
CDialog::P revDlgCtrl
Imposta lo stato attivo sul controllo precedente nella finestra di dialogo.
void PrevDlgCtrl() const;
Osservazioni:
Se lo stato attivo si trova al primo controllo della finestra di dialogo, passa all'ultimo controllo della casella.
CDialog::SetDefID
Modifica il controllo pushbutton predefinito per una finestra di dialogo.
void SetDefID(UINT nID);
Parametri
nID
Specifica l'ID del controllo pushbutton che diventerà l'impostazione predefinita.
CDialog::SetHelpID
Imposta un ID guida sensibile al contesto per la finestra di dialogo.
void SetHelpID(UINT nIDR);
Parametri
NIDR
Specifica l'ID della Guida sensibile al contesto.
Vedi anche
DLGCBR32 di esempio MFC
DLGTEMPL di esempio MFC
Classe CWnd
Grafico della gerarchia