提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|行业资讯|编辑:鲍佳佳|2021-01-18 11:56:36.823|阅读 822 次
概述:上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示。已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换。将上一讲中创建的Tip模态对话框改为非模态对话框,让大家看下效果。当功能实现了想要拥有美观的界面可以借助Toolkit Pro进行界面优化。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示。
已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换。将上一讲中创建的Tip模态对话框改为非模态对话框,让大家看下效果。当功能实现了想要拥有美观的界面可以借助Toolkit Pro进行界面优化。
Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,所以上一讲中创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改。
创建及显示非模态对话框的步骤
需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnClickedAddButton()函数体中添加的对话框显示代码。下面是具体步骤:
1.在AdditionDlg.h中包含CTipDlg头文件并定义CTipDlg类型的指针成员变量。详细操作方法是,在AdditionDlg.cpp中删除之前添加的#include "TipDlg.h",而在AdditionDlg.h中添加#include "TipDlg.h",这是因为我们需要在AdditionDlg.h中定义CTipDlg类型的指针变量,所以要先包含它的头文件;然后在AdditionDlg.h中为CAdditionDlg类添加private成员变量CTipDlg *m_pTipDlg;。
2.在CAdditionDlg类的构造函数中初始化成员变量m_pTipDlg。如果cpp文件中函数太多,我们可以在Class View上半个视图中找到CAdditionDlg类,再在下半个视图中找到其构造函数双击,中间客户区域即可马上切到构造函数的实现处。在构造函数体中添加m_pTipDlg = NULL;,这是个好习惯,C++编程入门系列的指针的赋值和指针运算中说到过,在任何指针变量使用前都初始化,可以避免因误访问重要内存地址而破坏此地址的数据。
3.将上一讲中添加的模态对话框显示代码注释或删除掉,添加非模态对话框的创建和显示代码。VC++中注释单行代码使用“//”,注释多行代码可以在需注释的代码开始处添加“/*”,结束处添加“*/”。修改后的CAdditionDlg::OnBnClickedAddButton()函数如下:
C++代码
void CAdditionDlg::OnBnClickedAddButton() { // TODO: Add your control notification handler code here /*INT_PTR nRes; // 用于保存DoModal函数的返回值 CTipDlg tipDlg; // 构造对话框类CTipDlg的实例 nRes = tipDlg.DoModal(); // 弹出对话框 if (IDCANCEL == nRes) // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行 return;*/ // 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建 if (NULL == m_pTipDlg) { // 创建非模态对话框实例 m_pTipDlg = new CTipDlg(); m_pTipDlg->Create(IDD_TIP_DIALOG, this); } // 显示非模态对话框 m_pTipDlg->ShowWindow(SW_SHOW); // 将各控件中的数据保存到相应的变量 UpdateData(TRUE); // 将被加数和加数的加和赋值给m_editSum m_editSum = m_editSummand + m_editAddend; // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值 UpdateData(FALSE); }
4.因为此非模态对话框实例是动态创建的,所以需要手动删除此动态对象来销毁对话框。我们在CAdditionDlg类的析构函数中添加删除代码,但是MFC并没有自动给出析构函数,这时需要我们手动添加,在对话框对象析构时就会调用我们自定义的析构函数了。在AdditionDlg.h文件中为CAdditionDlg添加析构函数声明:~CAdditionDlg();,然后在AdditionDlg.cpp文件中添加析构函数的实现,函数体如下:
C++代码
CAdditionDlg::~CAdditionDlg() { // 如果非模态对话框已经创建则删除它 if (NULL != m_pTipDlg) { // 删除非模态对话框对象 delete m_pTipDlg; } }
这样,非模态对话框创建和显示的代码就添加修改完了。让我们运行下看看效果吧。
在加法计算器对话框上输入被加数和加数,然后点“计算”按钮,依然像上节一样弹出了提示对话框,但是先不要关闭它,你可以拖动它后面的加法计算器对话框试试,我们发现加法计算器对话框竟然可以拖动了,而且“和”编辑框里已经显示了运算结果,这表明提示对话框显示以后还没有关闭,OnBnClickedAddButton() 就继续向下执行了,不仅如此,加法计算器的每个编辑框还都可以响应输入。
这只是一个简单的例子,非模态对话框的用处有很多,以后大家在软件开发中会用到。
本节教程就到这里了,相信大家对对话框的使用更上了一个台阶了,在不同的情况下可以选择使用模态对话框和非模态对话框了。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
HOOPS Luminate不仅提升了TopSolid产品的可视化效果,还帮助其减少了在渲染开发上的投入,使其能够专注于自身的核心竞争力——提供一体化的CAD/CAM/PDM解决方案。
The Enigma Protector 是一款专门设计用来为应用程序添加高强度保护的强大工具。它旨在防止非法复制、反编译和修改代码等操作,以保护应用程序的安全性和完整性。
我们非常高兴地向大家宣布,FastReport Online Designer 2025.1 版本正式发布!这一全新的版本不仅进一步优化了用户体验,还引入了众多实用的新功能与改进,帮助您在浏览器中轻松设计模板和报表。欢迎查阅~
本文将为大家深入介绍QtitanChart组件,看看它是如何实现高效、灵活的Qt数据可视化解决方案,欢迎下载最新版组件体验!
专为Windows平台开发人员提供最全面的Visual C++界面开发组件
Xtreme Suite Pro为Windows开发人员提供的用于ActiveX COM的用户界面套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢