C++ MFC:嵌入的子对话框未显示在父对话框中
我遇到了一个演示如何使用MFC在父对话框中嵌入子对话框的示例。我正在使用Visual Studio 2015。我的设置如下。使用VisualStudioMFC应用程序向导创建一个新的MFC VisualC++项目,称为<代码> MFCpplication 3/COD>,我选择了一个<强>对话框的强>应用程序,其中MFC用于C++ MFC:嵌入的子对话框未显示在父对话框中,c++,visual-c++,mfc,dialog,embed,C++,Visual C++,Mfc,Dialog,Embed,我遇到了一个演示如何使用MFC在父对话框中嵌入子对话框的示例。我正在使用Visual Studio 2015。我的设置如下。使用VisualStudioMFC应用程序向导创建一个新的MFC VisualC++项目,称为 MFCpplication 3/COD>,我选择了一个对话框的应用程序,其中MFC用于共享DLL。使用样板代码,我有一个简单的厚框对话框,没有最大化或最小化框 在我的资源视图中,我转到对话框编辑器编辑主对话框。我添加了一个中间有空白区域的图片控件,并将其命名为IDC\u STAT
IDC\u STATIC
。这将只是用作我希望嵌入的“我的孩子”对话框的占位符。它看起来像:
仍然在资源视图中,我创建了一个新对话框。我叫它IDD_CHILD。我添加了一些组件。看起来是这样的:
现在回到解决方案资源管理器中,我使用添加类向导添加一个类,选择添加MFC类。类名是CChildDialog
,基类是CDialog
,我使用已经生成的IDD\u子项作为对话框ID。它生成.cpp
和相关的.h
文件。在CChildDialog
的构造函数中,我添加了对Create
函数的调用,使构造函数成为:
CChildDialog::CChildDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_CHILD, pParent)
{
Create(IDD_CHILD, pParent);
}
现在,我修改了创建项目时自动生成的对话框代码。在CMFCApplication3Dlg.h
中,我添加了类型为CChildDialog*
的private
成员,名为m\u childDlg
,并包含相关头文件。在CMFCApplication3Dlg.cpp
中,我在return
语句之前将其添加到OnInitDialog
函数中:
CRect rc;
GetDlgItem(IDC_STATIC)->GetWindowRect(rc);
ScreenToClient(&rc);
m_childDlg = new CChildDialog(this);
m_childDlg->MoveWindow(rc);
现在我构建解决方案,运行它,但它看起来就像第一张图片中的一样。子对话框的空白占位符点,但没有子对话框。我可能做错了什么?事实证明(在撰写此问题时),我的问题的答案是在资源视图中需要设置两个属性。当打开子对话框(IDD\u child
)时,我需要在“属性”窗格中设置以下属性:
- 风格:儿童
- 可见:真
(我不知道为什么Visible在这种情况下默认为FALSE)。做出这两个改变,瞧!我得到我的嵌入式对话框:
默认情况下,“可见”为FALSE
,因为这些对话框常用于选项卡控件中,其中多个框占据相同的空间并根据需要显示,IMHO