Condividi tramite


Esempio MODELESS: oggetto CDialog utilizzato come finestra di dialogo non modale

Aggiornamento: novembre 2007

Nell'esempio MODELESS viene illustrato l'utilizzo di un oggetto CDialog MFC come finestra di dialogo non modale. MODELESS è un'applicazione semplice a finestre di dialogo in cui viene gestita una casella di riepilogo nella finestra di dialogo principale e viene fornita una finestra di dialogo non modale che consente di aggiungere stringhe alla casella di riepilogo.

Nota sulla sicurezza:

Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti.

Per ottenere gli esempi e le istruzioni per l'installazione:

  • In Visual Studio scegliere Esempi dal menu ?.

    Per ulteriori informazioni, vedere Individuazione dei file di esempio.

  • La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.

  • È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.

Generazione ed esecuzione dell'esempio

Per generare ed eseguire l'esempio MODELESS

  1. Aprire il file di soluzione modeless.sln.

  2. Scegliere Genera dal menu Genera.

  3. Scegliere Avvia senza eseguire debug dal menu Debug.

All'inizio dell'esempio viene visualizzata una casella di riepilogo vuota. Per aprire la finestra di dialogo non modale, fare clic su Add. Mentre è aperta la finestra Modeless Adder, è comunque possibile restituire lo stato attivo alla finestra di dialogo principale. Quando la finestra di dialogo non modale è aperta, il pulsante Add della finestra di dialogo principale è disattivo, in modo che l'utente non possa creare più istanze di finestra di dialogo non modale.

La classe CMainDlg della finestra di dialogo principale gestisce un puntatore alla finestra di dialogo non modale. Questa operazione viene eseguita per comodità: una volta creata, la finestra di dialogo non modale non richiede altre operazioni di gestione. Nell'applicazione che si crea, è possibile scegliere di presentare le informazioni sulla finestra di dialogo non modale. In questo caso, il puntatore fornisce l'accesso all'oggetto C++ gestendo la finestra di dialogo e costituisce quindi un buon punto di partenza.

Il codice per il pulsante Add della finestra di dialogo principale crea la finestra di dialogo non modale utilizzando la funzione Create, invece di chiamare DoModal. Questa operazione rende la finestra non modale. Windows gestisce i messaggi per la casella in modo differente. Quando la casella viene eliminata, non viene utilizzato EndDialog, ma viene chiamato DestroyWindow. Poiché le funzioni membro OnOk e OnCancel di un oggetto CDialog chiamano EndDialog, assicurarsi che la finestra di dialogo non modale non chiami queste funzioni, ma ne esegua l'override per chiamare DestroyWindow.

Solitamente, quando si crea una finestra di dialogo modale, la si elimina manualmente dopo che è stato restituito DoModal. Poiché non è possibile attendere che venga restituito Create mentre è visualizzata la finestra di dialogo non modale, è necessario che un altro meccanismo elimini l'oggetto C++ associato alla finestra. In questo esempio viene utilizzato un meccanismo molto semplice: viene eseguito delete this in PostNcDestroy, una funzione che viene chiamata in seguito all'eliminazione dell'area non client della casella.

Si osservi che la finestra di dialogo non modale comunica con la finestra di dialogo padre in due modi diversi. Il primo è quando l'utente sceglie OK: la stringa nel controllo di modifica della finestra di dialogo non modale viene aggiunta al contenuto della casella di riepilogo della finestra di dialogo modale. Il secondo è quando l'utente elimina la finestra: la casella non modale chiama la funzione BoxDone nella finestra modale. Questa funzione reimposta il puntatore alla finestra di dialogo modale e riattiva il pulsante Add.

Parole chiave

Nell'esempio vengono illustrate le seguenti parole chiave:

AfxGetApp; CDC::DrawIcon; CDC::GetSafeHdc; CDialog::Create; CDialog::DoModal; CDialog::OnCancel; CDialog::OnOK; CListBox::AddString; CMenu::AppendMenu; CMenu::ModifyMenu; CRect::Height; CRect::Width; CString::IsEmpty; CString::LoadString; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWnd::DestroyWindow; CWnd::DoDataExchange; CWnd::EnableWindow; CWnd::GetClientRect; CWnd::GetDlgItem; CWnd::GetWindowText; CWnd::IsIconic; CWnd::OnPaint; CWnd::OnQueryDragIcon; CWnd::OnSysCommand; CWnd::PostNcDestroy; CWnd::SendMessage; CWnd::SetActiveWindow; GetSystemMenu; GetSystemMetrics; LoadIcon

Nota:

Alcuni esempi, tra cui il presente, non sono stati cambiati per riflettere le modifiche apportate alle procedure guidate, alle librerie e al compilatore di Visual C++, tuttavia forniscono comunque le istruzioni per completare l'attività desiderata.

Vedere anche

Altre risorse

Esempi relativi ad MFC