MFC:嵌入式子对话框未显示在父对话框中
MFC: Emdedded child dialog is not showing up within parent dialog
我发现 tutorial 显示了如何使用 MFC 在父对话框中嵌入子对话框。我使用的是 Visual Studio 2015。我的设置如下。使用 Visual Studio MFC 应用程序向导创建一个名为 MFCApplication3
的新 MFC Visual C++ 项目,我 select 一个基于 Dialog 的 应用程序,其中使用了 MFC一个 共享 DLL。使用样板代码,我有一个简单的粗框对话框,没有最大化或最小化框。
在我的资源视图中,我转到我的对话框编辑器来编辑主对话框。我添加了一个中间有空白区域的图片控件,并命名为IDC_STATIC
。这将仅用作我希望嵌入的子对话框的占位符。看起来像:
还是在资源视图中,我创建了一个新的对话框。我称之为IDD_CHILD。我添加了一些组件。它看起来像这样:
现在回到解决方案资源管理器,我使用添加 Class 向导添加 class,select 正在添加 MFC Class。 class 名称是 CChildDialog
,基数 class 是 CDialog
,我使用已经生成的 IDD_CHILD
作为对话 ID。它生成 .cpp
和关联的 .h
文件。在 CChildDialog
的构造函数中,我添加了对 Create
函数的调用,因此构造函数变为:
CChildDialog::CChildDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_CHILD, pParent)
{
Create(IDD_CHILD, pParent);
}
现在修改一下创建项目时自动生成的对话框代码。在 CMFCApplication3Dlg.h
中,我添加了一个名为 m_childDlg
的 CChildDialog*
类型的 private
成员,以及 #include
关联的头文件。在 CMFCApplication3Dlg.cpp
中,我将其添加到 OnInitDialog
函数中 return
语句之前:
CRect rc;
GetDlgItem(IDC_STATIC)->GetWindowRect(rc);
ScreenToClient(&rc);
m_childDlg = new CChildDialog(this);
m_childDlg->MoveWindow(rc);
现在我构建解决方案,运行 它,但它看起来与第一张图片中的一样。子对话框的空白占位符点,但没有子对话框。我可能做错了什么?
事实证明(在撰写此问题时)我的问题的答案是我需要在资源视图中设置的两个属性。当我打开子对话框 (IDD_CHILD
) 时,在属性窗格中,我需要设置以下属性:
- 风格:儿童
- 可见:真
(我不确定为什么 Visible 在这种情况下默认为 FALSE)。进行这两个更改,瞧!我得到了我的嵌入式对话框:
我发现 tutorial 显示了如何使用 MFC 在父对话框中嵌入子对话框。我使用的是 Visual Studio 2015。我的设置如下。使用 Visual Studio MFC 应用程序向导创建一个名为 MFCApplication3
的新 MFC Visual C++ 项目,我 select 一个基于 Dialog 的 应用程序,其中使用了 MFC一个 共享 DLL。使用样板代码,我有一个简单的粗框对话框,没有最大化或最小化框。
在我的资源视图中,我转到我的对话框编辑器来编辑主对话框。我添加了一个中间有空白区域的图片控件,并命名为IDC_STATIC
。这将仅用作我希望嵌入的子对话框的占位符。看起来像:
还是在资源视图中,我创建了一个新的对话框。我称之为IDD_CHILD。我添加了一些组件。它看起来像这样:
现在回到解决方案资源管理器,我使用添加 Class 向导添加 class,select 正在添加 MFC Class。 class 名称是 CChildDialog
,基数 class 是 CDialog
,我使用已经生成的 IDD_CHILD
作为对话 ID。它生成 .cpp
和关联的 .h
文件。在 CChildDialog
的构造函数中,我添加了对 Create
函数的调用,因此构造函数变为:
CChildDialog::CChildDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_CHILD, pParent)
{
Create(IDD_CHILD, pParent);
}
现在修改一下创建项目时自动生成的对话框代码。在 CMFCApplication3Dlg.h
中,我添加了一个名为 m_childDlg
的 CChildDialog*
类型的 private
成员,以及 #include
关联的头文件。在 CMFCApplication3Dlg.cpp
中,我将其添加到 OnInitDialog
函数中 return
语句之前:
CRect rc;
GetDlgItem(IDC_STATIC)->GetWindowRect(rc);
ScreenToClient(&rc);
m_childDlg = new CChildDialog(this);
m_childDlg->MoveWindow(rc);
现在我构建解决方案,运行 它,但它看起来与第一张图片中的一样。子对话框的空白占位符点,但没有子对话框。我可能做错了什么?
事实证明(在撰写此问题时)我的问题的答案是我需要在资源视图中设置的两个属性。当我打开子对话框 (IDD_CHILD
) 时,在属性窗格中,我需要设置以下属性:
- 风格:儿童
- 可见:真
(我不确定为什么 Visible 在这种情况下默认为 FALSE)。进行这两个更改,瞧!我得到了我的嵌入式对话框: