Como alterar uma caixa de diálogo sem janela MFC para ser filho de um CView em um aplicativo MDI?
Pergunta
Eu tenho um aplicativo MFC que é uma implementação de Doc/View/Frame.Uma caixa de diálogo está sendo executada como uma caixa de diálogo sem janela restrita que aparece sob demanda (a partir de uma opção de menu).Estou tentando adicionar a caixa de diálogo sem janela restrita a uma visualização filho MDI.Basicamente, quero carregar o modelo do arquivo de recursos e criá-lo como filho do CView em meu novo trio (doc/view/frame) que estou adicionando às listas de modelos para o MDI.
Eu tentei algumas coisas na minha classe CMyView derivada:
void CMyView::OnInitialUpdate()
{
m_ListDialog = new Dialogs::CListDialog( m_config, this );
m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
m_ListDialog->ShowWindow( SW_SHOW );
}
Tentei ligar para SetWindowPos, ModifyStyle (WS_CHILD, WS_VISIBLE, DS_CONTROL).Tentei modificar o arquivo de recurso para definir o filho e controlar manualmente.
Toda vez que ele chama Create, o m_hWnd do ListDialog é deixado como 0.Isso me diz que não está sendo criado corretamente.Qualquer chamada para SetWindowPos() ou ShowWindow() falha porque m_hWnd é 0 (falha na asserção de depuração).
O que preciso fazer para que um diálogo sem janela restrita seja construído, criado e apareça como filho do CMyView em meu aplicativo MDI?
Solução
Não sei. Mas...
Você tem várias opções alternativas que podem ser adequadas, dependendo da aparência do seu aplicativo.
1/usando CFormView
. Se sua visualização for dedicada à caixa de diálogo, você poderá derivar uma visualização da classe CFFFFRVIEW MFC. O objetivo dessa visão é exibir uma caixa de diálogo.
Juste Crie um novo aplicativo usando o assistente e acho que você poderá escolher a classe CformView como sua classe de visualização e copie o arquivo gerado para o seu aplicativo existente.
2/ usando um CSplitterWnd
. Uma visualização é uma cfformView e a outra sua CView atual.
3/ usando CDialogBar
Se sua visualização já exibir algo, você poderá adicionar sua caixa de diálogo como uma barra de ferramentas usando a classe CDialogBar.
Outras dicas
isso está funcionando no meu aplicativo MDI ...
void CGUIView::OnInitialUpdate()
{
CView::OnInitialUpdate();
p_Dlg = new CTestDlg; // a CDialog derived class
p_Dlg->Create(IDD_DIALOG1,this);
p_Dlg->ShowWindow(SW_SHOW);
}