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