Mic*_*utz 3 c++ embed mfc dialog visual-c++
我遇到了一个教程,展示了如何使用 MFC 在父对话框中嵌入子对话框。我使用的是 Visual Studio 2015。我的设置如下。使用 Visual Studio MFC 应用程序向导创建一个名为 的新 MFC Visual C++ 项目MFCApplication3,我选择了一个基于对话框的应用程序,其中 MFC 用于共享 DLL。使用样板代码,我有一个简单的厚框对话框,没有最大化或最小化框。
在我的资源视图中,我转到我的对话框编辑器来编辑主对话框。我添加了一个中间有空白区域的图片控件并将其命名为IDC_STATIC. 这将仅用作我希望嵌入的子对话框的占位符。看起来像:
仍然在资源视图中,我创建了一个新对话框。我称之为 IDD_CHILD。我添加了一些组件。它看起来像这样:
现在回到解决方案资源管理器,我使用添加类向导添加一个类,选择添加一个 MFC 类。类名是CChildDialog,基类是CDialog,我使用已经生成的IDD_CHILD作为对话框 ID。它生成.cpp相关.h文件。在 的构造函数中CChildDialog,我添加了对该Create函数的调用,因此构造函数变为:
CChildDialog::CChildDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_CHILD, pParent)
{
Create(IDD_CHILD, pParent);
}
Run Code Online (Sandbox Code Playgroud)
现在我修改了创建项目时自动生成的对话框代码。在 中CMFCApplication3Dlg.h,我添加了一个名为的private成员,以及相关的头文件。在 中,我将其添加到语句之前的函数中:CChildDialog*m_childDlg#includeCMFCApplication3Dlg.cppOnInitDialogreturn
CRect rc;
GetDlgItem(IDC_STATIC)->GetWindowRect(rc);
ScreenToClient(&rc);
m_childDlg = new CChildDialog(this);
m_childDlg->MoveWindow(rc);
Run Code Online (Sandbox Code Playgroud)
现在我构建解决方案,运行它,但它看起来像第一张图片中的那样。子对话框的空白占位符点,但没有子对话框。我可能做错了什么?
事实证明(在撰写此问题时)我的问题的答案是我需要在资源视图中设置的两个属性。当我打开子对话框 ( IDD_CHILD) 时,在属性窗格中,我需要设置以下属性:
(我不确定为什么 Visible 在这种情况下默认为 FALSE)。进行这两个更改,瞧!我得到了我的嵌入式对话框: