1

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

我在派生的 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 的子项的无模式对话框?

4

2 回答 2

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);
}
于 2010-03-31T14:23:55.773 回答
1

我不知道。但是......
您有几个替代选择,可能适合您的应用程序的外观。

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

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

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

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

于 2010-03-31T09:46:41.807 回答