MFC对话框建立

1、建立对话框对象编辑器

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

2.建立话话框对象this

模态对话框的建立:指针

如:

 CTestDlg    dlg;

 dlg.DoModal();

非模态对话框建立:code

如:对象

CTestDlg dlg;生命周期

dlg.Create(IDD_DIALOG, this);资源

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

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

正确地建立非模态对话框的代码以下:

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

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

一、CTestDlg   *pDlg = new CTestDlg;能够定义在头文件.h中;

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

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

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

相关文章
相关标签/搜索