博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDialog 非模态对话框的创建和销毁
阅读量:4298 次
发布时间:2019-05-27

本文共 997 字,大约阅读时间需要 3 分钟。

非模态对话框需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。

 

还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delete掉这个指针。

 

了解了理论过后,下面我们就可以用代码实现一下非模态对话框的创建和销毁过程:

//建立

//主框架中:

CTestDlg *pDlg=new CTestDlg;

pDlg->Create(IDD_TESTDLG,this);

pDlg->ShowWindow(SW_SHOW);

 

//对话框中:

void CTestDlg::OnCancel()

{

DestroyWindow();

}

 

void CTestDlg::PostNcDestroy()

{

CDialog::PostNcDestroy();

delete this;

}

 

PS:

提示1在非模态对话框的OnCancel函数中可以不调用CWnd::DestroyWindow,取而代之的是调用CWnd::ShowWindow(SW_HIDE)来隐藏对话框.在下次打开对话框时就不必调用Create了,只需调用CWnd::ShowWindow(SW_SHOW)来显示对话框.这样做的好处在于对话框中的数据可以保存下来,供以后使用.由于拥有者窗口在被关闭时会调用DestroyWindow删除每一个所属窗口,故只要非模态对话框是自动清除的,程序员就不必担心对话框对象的删除问题.(当需要释放资源时,可以重载WM_DESTORY)

 

PS:

{

对话框数据交换:

    为了和控件交换数据可以定义一个变量与某一个控件关联。

    为了控制控件可以定义一个对象与一个控件相关联。

    注意:一个控件只能和一个对象,一个变量相联,多了会产生错误。

    UpdateData(TRUE);     //控件的值刷新至关联的变量

    UpdateData(FALSE);    //变量的值刷新至控件

    CDialogOnInitDialog中,系统调用UpdataData(FALSE);

    CDialog::OnOk中系统调用UpdateData(TRUE);

}

转载地址:http://plnws.baihongyu.com/

你可能感兴趣的文章
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>