隐藏MFC对话框DoModal出来的窗口

前言:
环境:win7sp1 x64 vs2008 mfc
目的:对话框程序 想在初始化时隐藏界面
实施:
- 在重载函数OnInitDialog()中添加ShowWindow(SW_HIDE); 发现不起作用 所以有了度娘谷哥之路
过程:
- WM_NCPAINT
void CxDlg::OnNcPaint()
{
static int i = 2;
if (i > 0)
{
i--;
ShowWindow(SW_HIDE);
}
else
{
CDialogEx::OnNcPaint();
}
}
效果一级棒 但是我有两个工程 一个i=2才行 一个i=3才行 网上的说法i=2是有道理的  但我查不出第三个消息在哪发的  所以暂时保留着这个方案
- 定时器 没想过 因为一看都不专业

- DefWindowProc  试过 在某些情况下效果很好 但不适用大部分情况

</

<think>我们正在处理用户的问题:如何在MFC中实现对话框与父窗口的绑定。根据用户的问题,我们需要解释如何将MFC对话框绑定到父窗口。根据引用[1]:在对话框的构造函数中,有一个可选形参CWnd* pParent,用于指定父窗口。因此,创建对话框时,我们可以通过传递父窗口的指针来实现绑定。另外,引用[2]提到了如何为对话框资源绑定一个CDialogEx的派生类,但这里更关注的是创建对话框时指定父窗口。步骤:1.在创建对话框对象时,传递父窗口的指针给构造函数。2.调用对话框DoModal或Create函数时,也可以指定父窗口(但注意,构造函数已经指定了,通常我们使用构造函数的方式)。具体实现:假设我们有一个父窗口(比如一个视图类或框架窗口),我们想在这个父窗口上弹出一个模态对话框。在父窗口的成员函数中(例如响应按钮点击):CHelloWorldDlgdlg(this);// this指向父窗口,作为父窗口指针传递给对话框构造函数在对话框类中,构造函数通常如下:CHelloWorldDlg::CHelloWorldDlg(CWnd*pParent/*=NULL*/): CDialogEx(CHelloWorldDlg::IDD, pParent){//初始化代码}这样,对话框就被绑定到父窗口了。绑定后,对话框将作为父窗口的子窗口,在父窗口关闭时自动关闭,并且会相对于父窗口居中显示(默认行为)等。另外,对于非模态对话框,我们通常使用Create函数,也可以在Create函数中指定父窗口。例如:CHelloWorldDlg*pDlg =new CHelloWorldDlg(this);pDlg->Create(CHelloWorldDlg::IDD,this);pDlg->ShowWindow(SW_SHOW);注意:非模态对话框需要自己管理生命周期,这里只是展示如何指定父窗口。引用[1]和[2]提供了相关的背景信息,我们可以据此回答。因此,回答如下:</think>在 MFC 中实现对话框与父窗口的绑定,主要通过以下步骤完成: ### 关键步骤 1. **构造函数传参** 在对话框类的构造函数中,通过 `pParent` 参数指定父窗口指针。 示例代码(对话框头文件): ```cpp class CMyDialog : public CDialogEx { public: CMyDialog(CWnd* pParent = nullptr); // pParent 指向父窗口 // ... }; ``` 2. **创建时传递父窗口指针** 创建对话框实例时,将父窗口的 `this` 指针传入构造函数: ```cpp // 在父窗口(如 CFrameWnd 派生类)中调用 void CParentWindow::OnOpenDialog() { CMyDialog dlg(this); // 关键:传递父窗口指针 dlg.DoModal(); } ``` 3. **资源绑定(可选)** 若使用对话框资源,通过 **资源编辑器** 添加类时: - 右键对话框资源 → "添加类" - 基类选择 `CDialogEx` - 对话框 ID 自动绑定资源 ID [^2] ### 绑定效果 - **父子关系**:对话框关闭时自动跟随父窗口销毁 - **模态行为**:父窗口对话框显示期间被禁用(`DoModal` 时) - **坐标参照**:对话框默认居中于父窗口显示 - **数据交换**:通过 `DoDataExchange` 实现控件与成员变量的绑定[^3] ### 注意事项 - 若父窗口指针为 `NULL`,对话框将相对于桌面居中 - 非模态对话框需显式调用 `Create(IDD, pParent)` 并管理生命周期 - 父窗口需为有效的 `CWnd` 派生对象(如框架窗口、视图等) > 示例中 `CHelloWorldDlg(CWnd* pParent = NULL)` 的 `pParent` 参数即为父窗口绑定点,通过传递调用者的 `this` 指针建立关联[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值