Come modificare una finestra di dialogo MFC modale di essere il figlio di un CView in un'applicazione MDI?
Domanda
Ho un'applicazione MFC che è un / Vista implementazione Doc / Frame. Una finestra di dialogo è in esecuzione come finestra di dialogo non modale, che si apre su richiesta (da un'opzione di menu). Sto cercando di aggiungere la finestra di dialogo non modale a una vista figlio MDI. Fondamentalmente, voglio caricare il modello dal file di risorse, e creare come un figlio del CView nel mio nuovo trio (doc / view / frame) che sto aggiungendo alle liste di modello per la MDI.
Ho provato un paio di cose nella mia classe CMyView derivata:
void CMyView::OnInitialUpdate()
{
m_ListDialog = new Dialogs::CListDialog( m_config, this );
m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
m_ListDialog->ShowWindow( SW_SHOW );
}
Ho provato a chiamare SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL). Ho provato la modifica del file di risorse per impostare il bambino e controllare manualmente.
Ogni volta che chiama Crea, m_hWnd del ListDialog viene lasciato come 0. Questo me non è sempre creato correttamente dice. Ogni chiamata a SetWindowPos () o ShowWindow () fallisce perché il m_hWnd è 0 (debug asserzione fallisce).
Che cosa devo fare per ottenere una finestra di dialogo non modale per essere costruito, creato, e appaiono come un bambino di CMyView nella mia applicazione MDI?
Soluzione
Non lo so. Ma ...
Sono disponibili diverse scelte alternative che potrebbero essere adatti a seconda di come l'applicazione dovrebbe apparire.
1 / usando CFormView
.
Se il vostro punto di vista è dedicata alla finestra di dialogo, allora è possibile derivare una vista dalla classe CFormView MFC. Lo scopo di questo punto di vista è quello di visualizzare una finestra di dialogo.
Juste creare una nuova applicazione utilizzando la procedura guidata e penso che si dovrebbe essere in grado di scegliere la classe CFormView come la classe di visualizzazione, quindi copiare il file generato nella vostra applicazione existaing.
2 / Uso di un CSplitterWnd
. Un punto di vista di essere un CFormView e l'altro vostro CView corrente.
3 / usando CDialogBar
Se la visualizzazione mostra già qualcosa, puoi aggiungere la tua finestra come una barra degli strumenti utilizzando la CDialogBar di classe.
Altri suggerimenti
Questo è il lavoro nel mio MDI app ...
void CGUIView::OnInitialUpdate()
{
CView::OnInitialUpdate();
p_Dlg = new CTestDlg; // a CDialog derived class
p_Dlg->Create(IDD_DIALOG1,this);
p_Dlg->ShowWindow(SW_SHOW);
}