模态对话框和非模态对话框的那点事
来源:互联网 发布:mac安装win10不用u盘 编辑:程序博客网 时间:2024/04/27 23:20
模态对话框和非模态对话框的创建方式和值的注意的地方
一:模态对话框:每次调用模态对话框弹出后,用户只能与该对话框进行交互,而其他用户界面对象接收不到输入信息;
调用方式比较简单,创建想要弹出对话框类的一个实例,然后调用DoModal()函数即可;
1. 如果想要子窗口的值返回给父窗口,这时可以直接调用子窗口类实例的成员,但可以先用
if(IDOK==dlg.DoModal()) //DoMadal函数的返回值为IDOK
{
//这里可以添加代码把子窗口的值返回父窗口
}
2. 如果想把父窗口的值传递给子窗口,这时可以在创建子窗口类的实例时,把想要的传值作为子窗口类的构造函数中的参数传递。
做法如下:先改变子窗口类的构造函数,添加第二个参数:(CWnd* pParent = NULL,“添加子窗口接收父窗口传值的变量定义,并初始化”),这个变量可以再在构造函数的定义中把值传给对话框的变量。
二:非模态对话框:每次调用后,用户还可与其他对话框进行信息交互;
非模态对话框中创建的实例不能是普通类型的,因为正常建立的实例dlg是局部变量,在退出对话框时会被销毁,实例销毁同时窗口也销毁,所以会无法显示调用的非模态对话框;
正确做法可以是new一个实例指针,于是指针放在堆里,只有在程序结束时才会消亡:先在父类添加子窗口类的指针m_pDlg, 然后
m_pDlg=new CModeDlg; //CModeDlg为子窗口类
m_pDlg->Create(IDD_DIALOG1,this); //IDD_DIALOG1为子窗口的资源名
m_pDlg->ShowWindow(SW_SHOW); //ShowWindow(SW_SHOW)是改变窗口属性的可见性,当然如果先在子窗口把属性改为可见,就不需要这行代码,但避免忘记,还是加上这行使窗口可见的代码吧。
m_pDlg->Create(IDD_DIALOG1,this); //IDD_DIALOG1为子窗口的资源名
m_pDlg->ShowWindow(SW_SHOW); //ShowWindow(SW_SHOW)是改变窗口属性的可见性,当然如果先在子窗口把属性改为可见,就不需要这行代码,但避免忘记,还是加上这行使窗口可见的代码吧。
注意:我new的指针内存在堆里,程序消亡但内存还没释放,如果没有析构指针,会造成内存泄露;
这时可在Dialog中添加PostNcDestroy函数,用它来释放动态创建时的指针
delete m_pDlg; //销毁创立的new类型,并防止野指针
m_pDlg=NULL;
m_pDlg=NULL;
提醒:这个PostNcDestroy函数不管有没有调用非模态对话框都会在程序最后调用的,所以如果在使用时没有点击到非模态创立的对话框,会出错,因为在没有点击非模态创立的对话框时,没有动态创建 m_pDlg,就没有为m_pDlg分配内存,但系统都会调用PostNcDestroy来销毁m_pDlg,析构一个没有分配内存的指针,肯定会出错啊。
0 0
- 模态对话框和非模态对话框的那点事
- 《MFC那点事儿》の模态对话框和非模态对话框
- 对话框1----建立模态对话框和非模态对话框
- MFC 对话框类、非模态对话框和模态对话框
- 模态对话框和非模态对话框的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 模态对话框和非模态对话框的区别1
- 模态对话框和非模态对话框的区别2
- 系统处理非模态对话框和模态对话框的区别
- Qt的模态对话框和非模态对话框
- 模态对话框和非模态对话框的区别
- 关于“模态对话框”和“非模态对话框”的区别
- 模态对话框和非模态对话框的机制
- 关于“模态对话框”和“非模态对话框”的区别
- 模态对话框和非模态对话框的区别
- vc的模态对话框和非模态对话框
- vc的模态对话框和非模态对话框
- vc的模态对话框和非模态对话框
- SQL 高级(2)
- 【docker】fig开源项目
- NC 简易仿真
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path解决办法
- C#设置Excel单元格格式
- 模态对话框和非模态对话框的那点事
- POJ 3468——A Simple Problem with Integers(线段树 成端增减,区间求和)
- Ubuntu wireless network connection in command line
- Add Two Numbers
- 51. 某公司的面试题:100个人去按100个灯,每个人只能按它顺序的倍数的灯
- scrapy + selenium 爬取js生成的网页元素
- POJ 1236 Network of Schools(强连通分量)
- 百度人与信息、腾讯人与人、阿里人与商品、小米人与手机
- 谷歌笔试题整理(二)