我的设计如下:
所以基本上,我想在应用程序主对话框中嵌入三个对话框并在它们之间切换,对于每个按钮单击即,按钮1将显示对话框1,按钮2将隐藏对话框1并显示对话框2 ...等等。 每个对话框都有不同的设计和功能。
我尝试使用CPropertySheet类添加页面但其GUI不同。它具有使用下一个/后退按钮或选项卡控件导航对话框的选项。 根据我的要求,这些都不是。
所以我想知道在MFC中有可能有这样的设计吗?如果有,怎么样?我应该使用哪个类/控件。
任何帮助将不胜感激。
答案 0 :(得分: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);
在按钮单击时,隐藏先前显示的对话框(SW_HIDE)并使用ShowWindow(...)显示所选对话框(SW_SHOW)。
如果在添加资源编辑器中使用IDD_FORMVIEW样式创建嵌入式对话框,则它将具有适当的嵌入样式。
另一种选择可能是使用嵌入的PropertySheet并隐藏选项卡行并以编程方式更改按钮单击上的选项卡。我发现它对于边框,定位,验证以及我喜欢的内容都太过模糊了。
答案 1 :(得分:4)
答案 2 :(得分: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);
现在,我可以随意显示或隐藏子对话框(按钮点击),如下所示:
pDlg1.ShowWindow(SW_SHOW);
pDlg2.ShowWindow(SW_HIDE);
pDlg3.ShowWindow(SW_HIDE);