七.对话框

来源:互联网 发布:camron社交网络 编辑:程序博客网 时间:2024/04/29 14:40

1.模态与非模态对话框

模态对话框创建

CTestDlg dlg;

dlg.DoModal();

 

非模态对话框的创建

CTestDlg *pDlg =new CTestDlg();

pDlg->Create(IDD_DIALOG1,this);

pDlg->ShowWindow(SW_SHOW);

这里第一个参数是对话框资源的ID和或话框模板的名称。

第二个参数是对话框的父窗口。

 

这里需要注意以下几点

1.  Create创建非模态对话框要用ShowWindow才会显示出来。

2.  这里用指针是因为要在堆上分配内存,在堆上分配内存是整个程序的生命周期一致的。这样做又会遇到一个问题,当这个函数体结速时,生命周期结束了,指针变量被销毁了。所指向的内存丢失了。

解决方法有两种:

一.     将指针变量声明为类的成员变量。在类的析构函数里,用delete函数释方指向的那块内存。

二.     CTestDlg中重载PostNcDestory函数,释放this指针指向的内存,delete this;

3.  如果用的是局部变量,在函数结束时会销毁局部变量。CTestDlg 被销毁了当然不会显示出来。还有一种解决方法是声明为类的成员变量。这样生命周期跟类一致。

4.  为什以模态对话框的可以用局部变量呢?这是因为模态对话框的实现机制,在弹出对话框后,创建模态对话框的函数被中止了,模态对话框关闭后,才继续执行创建函数体其它部份。

5.  对于非模态对话框,如果有ID值为IDOKIDCANCEL的按钮就必须重写OnOKOnCancel函数,在重写的函数中调用DestoryWindow函数销毁销口。

原创粉丝点击