如何将MFC无模式对话框更改为MDI应用程序中CView的子级?
我有一个MFC应用程序,它是一个文档/视图/框架实现。一个对话框以无模式对话框的形式运行,可根据需要(从菜单选项)弹出。我希望将无模式对话框添加到MDI子视图中。基本上,我希望从资源文件加载模板,并将其作为CView的子级创建在我要添加到MDI模板列表的新trio(doc/view/frame)中 我在派生的CMyView类中尝试了一些方法:如何将MFC无模式对话框更改为MDI应用程序中CView的子级?,mfc,mdi,modeless,Mfc,Mdi,Modeless,我有一个MFC应用程序,它是一个文档/视图/框架实现。一个对话框以无模式对话框的形式运行,可根据需要(从菜单选项)弹出。我希望将无模式对话框添加到MDI子视图中。基本上,我希望从资源文件加载模板,并将其作为CView的子级创建在我要添加到MDI模板列表的新trio(doc/view/frame)中 我在派生的CMyView类中尝试了一些方法: void CMyView::OnInitialUpdate() { m_ListDialog = new Dialogs::CListDialog(
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的子对象显示 我不知道。但是…根据应用程序的外观,您可以选择几个合适的选项 1/使用
CFormView
。
如果视图专用于该对话框,则可以从MFC类CFormView派生视图。此视图的目的是显示一个对话框
只需使用向导创建一个新的应用程序,我认为您应该能够选择CFormView类作为视图类,然后将生成的文件复制到现有的应用程序中
2/使用CSplitterWnd
。一个视图是CFormView,另一个视图是您当前的CView
3/使用CDialogBar
如果视图已经显示了某些内容,则可以使用类CDialogBar将对话框添加为工具栏 这在我的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);
}
使用CFormView而不是CDialog。经过调查,可能是“自定义控件”阻止了它的工作。这在测试应用程序中确实起作用,但只有在我修改了资源编辑器中的对话框以将样式属性更改为“Child”而不是“Popup”时才起作用。