在主对话框中嵌入对话框,并在MFC中单击按钮切换它们

foo*_*bar 4 c++ winapi mfc dialog

我的设计如下:

在此输入图像描述

所以基本上,我想在应用程序主对话框中嵌入三个对话框并在它们之间切换,对于每个按钮单击,即按钮1将显示对话框1,按钮2将隐藏对话框1并显示对话框2 ..等等.每个对话框都有不同的设计和功能.

我尝试使用CPropertySheet类来添加页面,但它的GUI是不同的.它具有使用下一个/后退按钮或选项卡控件导航对话框的选项.根据我的要求,这些都不是.

所以我想知道在MFC中有可能有这样的设计吗?如果有,怎么样?我应该使用哪个类/控件.

任何帮助将不胜感激.

imb*_*fab 7

你可以做的是使用一个普通的CDialog类,添加你的按钮,并创建一个frame/rect作为占位符,用于显示嵌入式对话框的位置.以下代码将创建和定位嵌入式对话框.

CRect rect;
CWnd *pHost = GetDlgItem(ID_OF_YOUR_FRAME_RECT);
pHost->GetWindowRect(&rect);
ScreenToClient(&rect);
pDialog->Create(ID_OF_YOUR_DIALOG, this);
pDialog->MoveWindow(&rect);
pDialog->ShowWindow(SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

在按钮单击时,隐藏先前显示的对话框(SW_HIDE)并使用ShowWindow(...)显示所选对话框(SW_SHOW).

如果在添加资源编辑器中使用IDD_FORMVIEW样式创建嵌入式对话框,则它将具有适当的嵌入样式.

另一种选择可能是使用嵌入的PropertySheet并隐藏选项卡行并以编程方式更改按钮单击上的选项卡.我发现它对于边框,定位,验证以及我喜欢的内容都太过模糊了.


foo*_*bar 1

仅使用基于对话框的应用程序对我有用的是 SetParent() 方法。不知道为什么没人提到它。看起来效果很好。我正在这样做:

 VERIFY(pDlg1.Create(PanelDlg::IDD, this));
 VERIFY(pDlg2.Create(PanelDlg2::IDD, this));
 VERIFY(pDlg3.Create(PanelDlg2::IDD, this));

   ::SetParent(pDlg1.GetSafeHwnd(), this->m_hWnd);
   ::SetParent(pDlg2.GetSafeHwnd(), this->m_hWnd);
   ::SetParent(pDlg3.GetSafeHwnd(), this->m_hWnd);
Run Code Online (Sandbox Code Playgroud)

现在我可以随意显示或隐藏子对话框(单击按钮),如下所示:

   pDlg1.ShowWindow(SW_SHOW);
   pDlg2.ShowWindow(SW_HIDE);
   pDlg3.ShowWindow(SW_HIDE);
Run Code Online (Sandbox Code Playgroud)