


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
详解VC+模态对话框和非模态对话框MFC中有两种类型的对话框:模态对话框和非模态对话框。模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他任务。非模态对话框是指当其显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。模态对话框的创建:创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能是创建并显示一个模态对话框,其返回值将作为CDialog类的另一个成员函数:EndDialog的参数,后者的功能是关闭模态对话框。一般显示模态对话框的实现代码如下:void CASCEView:OnDialog() CASCEDlg dlg; dlg.DoModal(); 非模态对话框的创建:要创建非模态对话框就需要利用CDialog类的Create成员函数,该函数有以下两种形式的声明:virtual BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );virtual BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );有上可知,CDialog:Create函数的第一个参数可以是对话框资源的ID(nIDTemplate),或者也可以是对话框模板的名称(lpszTemplateName);而第二个参数指定了对话框的父窗口,如果其值是NULL,则对话框的父窗口就是主应用程序窗口。当利用Create函数创建非模态对话框时,我们还需要接着调用ShowWindow函数来将这个对话框显示出来;而利用DoModal创建的模态对话框之所以不用,是因为DoModal函数本身就有显示模态对话框的作用。同时我们不能像模态对话框那样将对话框定义成对象,如下代码是显示不出非模态对话框的:void CASCEView:OnDialog() CASCEDlg dlg; dlg.Create(IDD_DIALOG1, this); dlg.ShowWindow(SW_SHOW);因为这里创建的非模态对话框对象dlg是一个局部对象,当程序执行时,会依次执行各条代码,当OnDialog函数执行结束时,dlg这个对象的生命周期也就玩玩了,它就会销毁与之相关联的对话框资源,对话框自然就显示不出来啦!而模态对话框之所以能够显示,是因为当执行到调用DoModal函数以显示模态对话框时,程序就会暂停执行,直到模态对话框关闭之后,程序才继续向下执行。而这之前,dlg还没销毁。因此,在创建非模态对话框时,不能将对话框对象定义成局部变量,解决方法有二:一是把对话框对象定义成CASCEView类的成员变量;二是把它定义成指针,在堆上分配内存,如下:void CASCEView:OnDialog() CASCEDlg *pDlg = new CASCEDlg; pDlg-Create(IDD_DIALOG1, this); pDlg-ShowWindow(SW_SHOW);但是这又引入了新的问题:我们必须释放pDlg占用的资源,否则会造成内存泄漏!况且这里pDlg还是一个局部指针变量,当它的生命周期结束时,在程序中就无法再引用它所指向的那块内存了。解决方法同样有两个:一是将pDlg定义成CASCEView类的成员变量,然后在CASCEView类的析构函数中调用delete函数释放它指向的内存;二是在CASCEDlg类中重载PostNcDestroy虚函数,释放this指针指向的内存:void CASCEDlg:PostNcDestroy() delete this; CDialog:PostNcDestroy(); 还有一点需要注意的是:当单击对话框上的默认OK按钮时,两种对话框都会消失。但对于模态对话框而言,此时对话框窗口对象被销毁了;而对非模态对话框来说,对话框窗口对象并未被销毁,只是隐藏起来而已。在非模态对话框中单击OK按钮后,程序会调用基类CDialog的OnOK函数,这是一个虚函数,后者又会调用EndDialog函数,这个函数用于终止模态对话框,但对于非模态对话框,这个函数只是使对话框窗口不可见,并不销毁它。因此,对非模态对话框来说,如果有一个ID值为IDOK的按钮,就必须重写基类的OnOK虚函数,并在重写的函数中调用DestroyWindow函数,以完成销毁对话框的工作,同时注意不要再调用基类的OnOK函数。同理,如果非模态对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 礼仪题库及答案2015
- 2025年生物技术产业孵化器共建与合作投资协议
- 2025年智能家居系统安装与维护安全责任协议书
- 2025年度航空航天用特种钢材加工及性能检测合同
- 2025年智慧城市建设用物联网传感器采购及数据加密合同
- 2025年度京津冀地区知识产权合作开发与应用协议
- 2025年环保电动车转让及售后服务保障合同
- 2025年畜禽养殖废弃物无害化处理与综合利用贷款合同
- 2025年食品加工企业卫生安全监管与培训承揽合同
- 2025年城市综合体商业街区租赁代理合作协议
- 环境综合应急预案
- 氯甲烷泄露应急预案
- 2.PaleoScan详细操作流程
- 林业有害生物防治知识竞赛真题模拟汇编(共184题)
- PLC西门子S7-1200应用技术完整全套教学课件
- 苏州银行总行信息科技部招聘考试真题2022
- 铜陵横港化工园区总体发展规划(2021-2035年)环境影响报告书
- 专升本数学教材(新)
- 安装电工电气调试员安全技术操作规程
- GB/T 11547-2008塑料耐液体化学试剂性能的测定
- (完整版)人工智能介绍课件
评论
0/150
提交评论