Como alterar uma caixa de diálogo sem janela MFC para ser filho de um CView em um aplicativo MDI?

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

  •  23-09-2019
  •  | 
  •  

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?

Foi útil?

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 CDialogBarSe 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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top