繁体   English   中英

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

[英]Embedding dialogs in main dialog and switching them with button click in MFC

我的设计如下:

在此输入图像描述

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

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

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

任何帮助将不胜感激。

你可以做的是使用一个普通的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并隐藏选项卡行并以编程方式更改按钮单击上的选项卡。 我发现它对于边框,定位,验证以及我喜欢的内容都太过模糊了。

如果你有MFC功能包,它首先附带VS2008 SP1并且在所有更高版本中,你可能想要考虑CMFCPropertySheet 链接页面上有许多示例,与您的设计非常相似。

例如,这个:

例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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM