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

问题描述 投票:1回答:2

我有一个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的子模式的无模式对话框?

mfc mdi modeless
2个回答
1
投票

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

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

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

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

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


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.