Come modificare una finestra di dialogo MFC modale di essere il figlio di un CView in un'applicazione MDI?

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

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?

È stato utile?

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top