如何将MFC无模式对话框更改为MDI应用程序中CView的子级?

时间:2010-03-30 13:27:38

标签: mfc mdi modeless

我有一个MFC应用程序,它是Doc / View / Frame实现。一个对话框作为无模式对话框运行,按需弹出(从菜单选项)。我想将无模式对话框添加到MDI子视图。基本上,我想从资源文件加载模板,并在我的新三重奏(doc / view / frame)中将其创建为CView的子项,我将其添加到MDI的模板列表中。

我在派生的CMyView类中尝试过一些东西:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

我尝试过调用SetWindowPos,ModifyStyle(WS_CHILD,WS_VISIBLE,DS_CONTROL)。我已经尝试修改资源文件以手动设置子控件。

每当它调用Create时,ListDialog的m_hWnd保留为0.这告诉我它没有被正确创建。对SetWindowPos()或ShowWindow()的任何调用都会失败,因为m_hWnd为0(调试断言失败)。

在MDI应用程序中,我需要做什么才能构建,创建并显示为CMyView的子模式的无模式对话框?

2 个答案:

答案 0 :(得分:1)

我不知道。但是......
根据应用程序的外观,您有几种可能的选择。

1 /使用CFormView。 如果您的视图专用于对话框,那么您可以从MFC类CFormView派生一个视图。此视图的目的是显示一个对话框。

Juste使用向导创建一个新应用程序,我认为你应该能够选择CFormView类作为你的视图类,然后将生成的文件复制到你现有的应用程序中。

2 /使用CSplitterWnd。一个视图是CFormView,另一个视图是当前的CView。

3 /使用CDialogBar 如果您的视图已显示某些内容,则可以使用类CDialogBar将对话框添加为工具栏。

答案 1 :(得分:1)

这适用于我的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);
}