对话框  一种次要窗口,包含按钮和各种选项,通过它们可以完成特定命令或任务。

对话框与窗口有区别,它没有最大化按钮、没有最小化按钮、不能改变形状大小

对话框:是人机交流的一种方式,用户对对话框进行设置,计算机就会执行相应的命令。对话框中有单选框、复选框等。

对话框的组成

对话框主要由两部分组成。

对话框资源:可以使用对话框编辑器来配置对话框的界面,如对话框的大小、位置、样式,对话框中控件的类型和位置等。另外,我们还可以在程序的执行过程中动态创建对话框资源。

对话框类:在MFC程序中,可以使用向导帮助用户建立一个与对话框资源相关联的类,通常这个类由CDialog类派生。

对话框的类型

对话框可以分为模式对话框和无模式对话框两种类型。

CDialog

为了能够方便的操作对话框,MFC为用户提供了CDialog类。它是在屏幕上显示对话框的基类,与对话框资源紧密相关,提供了管理对话框的接口,封装了一些对话框的相关操作。

从CDialog的定义代码可以看出,Cdialog提供了两套构建Cdialog对象的系统,分别用于模式对话框和无模式对话框。

无模式对话框对象的构建过程,它首先调用缺省的构造函数生成对话框对象,然后调用Create函数创建和初始化对话框。Cdialog类中的Create函数有两种函数原型:

BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );

BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );

其中,

参数lpszTemplateName是无模式对话框模板资源的标志符;

参数nIDTemplat是对话框模板资源的标志符,它通常以IDD_开头(例如IDD_DIALOG1);

参数pParentWnd是指向对话框对象所属的父窗口的指针(如果它为NULL,则表示对话框对象的父窗口是应用程序主窗口)。如果希望对话框中它的父窗口创建后马上被显示,就必须把对话框模板设置为WS_VISIBLE形式。否则,需要调用ShowWindow函数来显示对话框。

对于模式对话框,其构造函数如下所示:

CDialog( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );

CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );

构造函数的参数说明与无模式对话框的Create函数类似。在模式对话框中,当创建了对话框对象后,可以通过调用DoModal函数来显示对话框。

一般情况下,无论是模式对话框还是无模式对话框,都有两个按钮OK和CANCEL。对话框为它们提供了默认的消息处理函数OnOk和OnCancel。调用这两个函数都将关闭对话框。所不同的是,默认的OnOk函数中关闭对话框前将更新对话框数据,而默认的OnCancel函数不更新对话框数据。

当CDialog类检测到OK或Cancel键时,它将调用::EndDialog函数。EndDialog函数虽然结束了对话框应用程序,但却并没有删除对话框对象,释放内存。这对于模式对话框来说,不是问题,它的生存时间不长,我们一般在栈上创建它们;但无模式对话框则不同,它的生存时间更长,我们通常在栈上创建它们,并且希望它在消失之前能够删除自己。因此,大多数情况下,我们需要在无模式对话框中重载OnOK和OnCancel函数,加入DestroyWindows函数来彻底地删除它。

对话框数据交换和验证机制

在VC中,所有的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或“奇特”的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。

对话框数据交换(DDX,Dialog Data Exchange)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(DDV,Dialog Data Validation)则用于验证对话框中数据输入的有效性。MFC在每个对话框类中提供了一个用于重载的虚函数——DoDataExchange来实现对话框数据交换和验证工作。

对话框数据交换

如果使用DDX机制,则通常在OnInitDialog程序或对话框构造函数中设置对话框对象成员变量的初始值。在对话框即将显示前,应用程序框架的DDX机制将成员变量的值传递给对话框的控件,当对话框响应DoModal或Create而被显示时,对话框控件将“显示”这些值。Cdialog类中的OnInitDialog函数默认时将调用CWnd类的UpdateData成员函数初始化对话框中的控件。UpdateData函数的原型如下:

BOOL UpdateData( BOOL bSaveAndValidate = TRUE );

函数参数为TRUE,即将对话框及其控件中的数据传递给程序代码中的成员变量;

函数参数为FALSE,即将类中的数据状态传递给对话框及其控件。

当用户重载DoDataExchange函数时,也就为每一个数据成员(控件)指定了一个DDX函数调用。

对话框数据验证

除了调用DDX参数指定数据交换外,用户还可以使用DDV函数进行对话框数据验证。在调用控件的DDX函数后,必须立即调用该控件的DDV函数。大部分DDV函数的原型如下所示。

DDV_MinMaxCustom(pDX, Data, MinData, MaxData);

其中,参数pDX是一个指向CdataExchange对象的指针,参数Data中存放着即将被验证的数据,后两个参数用于定制数据的范围。

CdataExchange类

如果仅仅需要使用对话框数据,一般没有必要了解数据交换/验证的核心内容。但在了解了数据交换和验证的实质后,用户就可以编写自己的数据交换和验证代码,定制DDX/DDV.

对话框控件

控件是一个可以与其交互以完成输入或操作数据操作的对象,它也是一种特殊的窗口。控件通常出现在对话框或工具栏中。Windows提供了多种多样的控件,在MFC应用程序中,能够使用的控件通常可以分为三种。

1)windows公用控件:包括编辑控件、按钮、列表框、组合框、滑动条控件等,另外也包括所有者描述的控件。

2)ActiveX控件:既可以在对话框中使用,也可以在HTML网页中使用。

3)由MFC提供的其他控件类

我们主要介绍第一种类型的控件——Windows公用控件。

Windows操作系统提供了多种windows公用控件,这些控件对象都是可编程的,Visual C++的对话框编辑器支持将这些控件对象添加到对话框中。用户可以在工具箱的对话框编辑器中看到这些windows公用控件。MFC为了更好的支持windows公用控件,提供了多种控件类,每一个控件类封装一种控件,并提供相应的成员函数来管理操作控件。

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

html弹出对话框 自动点击,c#如何自动点击网页弹出的对话框的确认键相关推荐

  1. Delphi中点击网页弹出的Alert对话框的确定按钮

    实现的方法有很多,一般都是使用Windows API函数遍历窗口,查找指定标题的窗口,然后从该窗口查找确定按钮,向该按钮发送鼠标消息进行模拟点击.由于IE8由Alert弹出的网页对话框的标题是&quo ...

  2. 原生js实现如下效果: 一个按钮,点击它会弹出对话框,但5秒内再点击不会再弹出对话框。5秒后恢复正常。

    原生js实现如下效果: 一个按钮,点击它会弹出对话框,但5秒内再点击不会再弹出对话框.5秒后恢复正常. 第一种方式: 使用函数节流的方式(就是设置一个变量,来一个判断语句,判断这个变量的值.为真或假执 ...

  3. android弹出确认对话点击取消,Android 点击AlertDialog上的确定和取消按钮,使对话框不消失...

    Android中的AlertDialog弹出框在被点击时, 无论点击哪个按钮都会关闭窗口. 但是有时候我们不需要它关闭,例如输入用户名和密码,输错了,提示重新输入. 那么怎么做到点击确定或者取消按钮不 ...

  4. 弹出查看图片_报表工具如何实现“点击查看原图”

    在各种涉及图片的 Web 网站上,无论是搜图类.社交类.保险服务类,以及 ERP 或档案管理等内部系统,其中对于图片通常会提供一种点击图片查看原图的操作,也就是一开始呈现小图,点击后放大查看.这种操作 ...

  5. u盘自动打开html,如何快速禁用U盘自动弹出(播放)功能无需手动关闭弹出窗口

    如何快速禁用U盘自动弹出(播放)功能无需手动关闭弹出窗口 发布时间:2013-08-26 17:04:27   作者:佚名   我要评论 移动硬盘分了N个区的时候需要手动一个一个的关掉自动播放窗口,真 ...

  6. python删除网页弹出对话框_python selenium-webdriver 处理JS弹出对话框

    在实际系统中,在完成某些操作时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框. 1.警告消息框 ...

  7. 在PYQT5中,点击主窗口中的按钮,弹出子窗口

    目录 例1: 例2: 例3: 例4: 需求: 在PYQT5中,点击主窗口中的按钮,弹出子窗口. 测试代码: 例1: from PyQt5.QtWidgets import * import syscl ...

  8. php使用popover,php中bootstrap框架.popover弹出框,鼠标移动到上面自动显示,离开自动消失...

    $(function(){//显示弹出框 $("[rel=name]").popover({ trigger:'manual', placement : 'bottom', //p ...

  9. 弹出新网页在新的对话框中打开

    首先用VS2008新建基于对话框的MFC应用程序,添加webbrowser控件,Navigate导航! 具体看上篇blog http://blog.csdn.net/LightBoat09/archi ...

  10. win10计算机无限弹网页,win10系统浏览网页时频繁弹出广告怎么办 Window10阻止网页弹出广告的四种方法...

    使用win10系统电脑上网的用户,在打开网页浏览时经常会碰到一些广告弹窗.这样,不免让人感觉非常的困扰.那么,我们该怎样设置才能在windows10系统下阻止网页跳出广告弹窗呢?下面,小编就向大家分享 ...

最新文章

  1. CSDN 2022 届春季校园招聘火热启动!
  2. Memcached 集群环境Java客户端
  3. VC包含目录、附加依赖项、库目录及具体设置
  4. Maven的构建配置文件(Build Profiles)
  5. Vue提供操作DOM的方法
  6. NeurIPS2021 VALUE:快来刷榜吧!微软提出视频多模态新基准,同时含检索、caption、QA等多个任务!...
  7. 物联网-移远M26模块OpenCPU开发第1讲
  8. realme GT Neo3重磅细节曝光:首发150W快充 5分钟充50%
  9. Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
  10. Mysq 5.7l服务无法启动,没有报告任何错误
  11. 程序员因太过耿直,致苹果官网出现bug......
  12. QVideoWidget遇到的坑。
  13. java面试题:2018年6月
  14. doodoo.js快速入门教程 1
  15. Ubuntu搭建FTP服务器后用filezella连接报错
  16. ExcelVBA批量添加PDF文件
  17. 基于python LDA模型的英文推特邮件主题分析 完整数据+代码 可直接运行
  18. Python教程:去除背景,我保证不动她一根头发(附多种方式)
  19. java打星星_java初学打印星星以及九九乘法表
  20. rk3368-双以太网口

热门文章

  1. H5小游戏开发多少钱
  2. 刻录光盘不求人Nero刻录软件使用教程
  3. Solr实现全文检索
  4. 14152学年C#程序设计语言与.Net框架基础课程之学生blog名单
  5. Improved Techniques for Training GANs翻译与理解
  6. mysql 裸设备_什么叫做裸设备
  7. [李景山php] web 安全资料篇
  8. 更适合运动的耳机,设计时尚轻巧好用,南卡Runner CC3上手
  9. channel java_Java Channel
  10. python操作 e'xcel表格