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_childDlgCChildDialog* 类型的 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)。进行这两个更改,瞧!我得到了我的嵌入式对话框: