MFC对话框创建

一、创建对话框对象

1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:class CTestDlg : public CDialog

2.创建话话框对象

模态对话框的创建:

如:

 CTestDlg    dlg;

 dlg.DoModal();

非模态对话框创建:

如:

CTestDlg dlg;

dlg.Create(IDD_DIALOG, this);

但这样是得不到一个正常显示的非模态对话框的。因为模态与非模态对话框的实现方式并不相同,这里我们还要注意几点。

非模态对话框创建完成后是隐藏着的,必须调用ShowWindow来进行显示。 对于模态对话框,当执行到DoModal 函数以创建对话框时,程序会暂停执行,直至模态对话框关闭。所以创建模态对话框可以采用局部对象。 但是,对于非模态对话框,当执行Create函数时并不会暂停执行,当执行到大括号"}后Dlg局部对象被销毁生命周期结束,于是异常出现了。 解决方法有两个: 一、在View类中定义一个CTestDlg 成员变量。 二、动态创建一个CTestDlg 变量,并重写CTestDlg 类的 PostNcDestroy函数,在该函数里销毁对象 delete this; 无论创建的是模态对话框,还是非模态对话框,当我们单击确定或取消按钮后对话框都会消失。但这时低层的操作却是不同的。 对于模态对话框,此时对话框对象的确是被销毁了,但对于非模态对话框,这时只是隐藏起来不再显示。这需要我们自己调用DestoryWindow函数来进行销毁工作。 这时我们必须重写 CTestDlg 的 OnOK 、 OnCancel 两个函数(这两个是基类CDialog的虚函数),在这两个函数内调用DestroyWindow函数,并注意不再调用基类CDialog相应的函数。

正确地创建非模态对话框的代码如下:

CTestDlg   *pDlg = new CTestDlg;
pDlg->Create(IDD_DIALOG, this);
pDlg->ShowWindow(SW_SHOW);   

销毁非模态对话框及指针(网上很多资料,但试了之后关闭就打不开了),这里介绍我总结的方法

1、CTestDlg   *pDlg = new CTestDlg;可以定义在头文件.h中;

2、主对话框初始化OnInitDialog中需初始化 pDlg = NULL;

3、对话框的OnCancel()函数里面使用DestroyWindow() 并且需delete this(这句话会调用对话框的析构函数);

4、在对话框的析构函数里 清除 pDlg = NULL(这句可以解决第二次打不开对话框的问题);

 

转载于:https://my.oschina.net/u/3874841/blog/2980328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值