DDX:Dialog Data Exchange

如果使用DDX机制,一般会在OnInitDialog消息处理函数或Dialog构造函数中,为对话框对象的成员变量设置了初始值。在对话框显示前,框架的DDX机制将成员变量的值传给对话框中的控件,当调用DoModal或Create函数,对话框即将显示时,这些值也就显示在相应的控件上。

CDialog类的成员函数OnInitDialog的默认实现中,调用CWnd类的UpdateData成员函数来初始化对话框的控件。当用户单击OK按钮或调用成员函数UpdateData(TRUE),相同的机制会将控件值传给成员变量。

DDV:Dialog Data Validation 
    DDV机制会根据用户指定的验证规则来验证数据.它们仅仅应用于接受用于从键盘输入数据的控件成员变量。换言之,就是编辑控件和组合框.

数据交换和验证仅仅应用于为之选定了Value类别的成员变量。也就是CString,BOOL,数字,COleDateTime或COLeCurrency。

对话数据交换负责数据在控件中的进出。当对话首次出现的时候,每个控件窗口自动用相应的成员变量的值进行初始化。当用户通过单击OK按钮,或通过按Enter键关闭对话的时候,该控件无论是包含哪一个值或文本,都将被复制回该变量。

对话数据验证可以确保值落在规定的限制之内。交换和验证机制都是由MFC框架提供的。每个函数都有一个前缀DDX_或DDV_,来把它作为数据交换或数据验证函数来标识。

常见的对话数据交换函数

(1)交换函数:DDX_CBIndex, 获得/设置的数据类型:int, 应用于控件:Combobox 
(2)交换函数:DDX_CBString, 获得/设置的数据类型:Cstring, 应用于控件:Combobox 
(3)交换函数:DDX_CBStringExact,获得/设置的数据类型:Cstring, 应用于控件:Combobox 
(4)交换函数:DDX_Check, 获得/设置的数据类型:intCheck, 应用于控件:box 
(5)交换函数:DDX_DateTimeCtrl, 获得/设置的数据类型:Ctime, 应用于控件:Datetimepicker 
(6)交换函数:DDX_LBIndex, 获得/设置的数据类型:int, 应用于控件:List box 
(7)交换函数:DDX_LBString, 获得/设置的数据类型:CString, 应用于控件:Listbox 
(8)交换函数:DDX_LBStringExact,获得/设置的数据类型:CString, 应用于控件:List box 
(9)交换函数:DDX_MonthCalCtrl,获得/设置的数据类型:Ctime, 应用于控件:Month calendar 
(10)交换函数:DDX_Radio, 获得/设置的数据类型:int, 应用于控件:Radio button 
(11)交换函数:DDX_Scroll, 获得/设置的数据类型:int, 应用于控件:Scroll bar 
(12)交换函数:DDX_Text, 获得/设置的数据类型:CStringor numerical(BYTE,short,int,UINT,long,etc.),应用于控件:Edit control

在所有的数据交换函数之中,该函数是独一无二的,它只应用于一组控件,而不是一个控件。DDX_Radio返回一个int值用来指示用户打开了组中的哪个按钮:0代表组中的第一个按钮,1代表第二个按钮,以此类推。值-1的意思是小组中的所有按钮都是清除的。你可以调用DDX_Radio来确定单个单选按钮的状态(假如它是组中的唯一一个按钮)。在这种情况下,返回值0的意思是按钮是打开的,值-1意为按钮是关闭的。

建立一个单选按钮通常在对话编辑器中进行,我们一会儿就能看到。

MFC提供了大量的对话数据交换函数,它们可以在对话类中的控件成员变量之间移动数据。除了所列的常见函数之外,还有用于记录集数据和由ActiveX控件返回的数据的特殊交换函数。DDX_Control函数可以为几种不同类型的控件传输数据,例如Animate和IPAddress。

对话数据验证函数

(1)DDV_MinMaxByte指定限制范围内的一个BYTE值。 
(2)DDV_MinMaxInt指定限制范围内的一个int值。 
(3)DDV_MinMaxUInt指定限制范围内的一个UNIT值。 
(4)DDV_MinMaxLong指定限制范围内的一个long值。 
(5)DDV_MinMaxDWord指定限制范围内的一个DWORD值。 
(6)DDV_MinMaxFloat指定限制范围内的一个float值。 
(7)DDV_MinMaxDouble指定限制范围内的一个double值。 
(8)DDV_MaxCharsCString字符串的长度不能超过指定的最大长度。

当你为编辑控件或组合框添加成员变量,然后在Member Variable选项卡中的Control IDs框中选择控件的时候,两个提示之一将会出现在该选项卡的底部。究竟出现哪一个提示取决于变量所具有的是数字数据,还是文字数据;在任一种情况下,都要输入用于验证的变量限制值。

除了一个对话数据验证函数之外,所有函数都监视数值数据,以确保由用户输入的值落在指定的上下限之间。

例外是DDV_MaxChars函数,它用来验证键入到编辑控件或组合框中的字符数不超过给定的最大值。与交换函数不同,验证函数仅仅在对话关闭的时候起作用,而不在它刚出现的时候起作用。 
如果输入到一个控件的值落到了指定的限制之外,那么,该控件的验证函数将显示一个消息框,以通知用户出了问题。当消息框被关闭的时候,出问题的控件将具有一个焦点,提示用户重新输入数据。除非所有的数据验证函数都满足了,否则,用户不能够通过单击OK来关闭对话。

MFC--DDV与DDX对比相关推荐

  1. MFC中的DDX和DDV

    出处:http://m.blog.csdn.net/blog/weiqubo/8179167 DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实 ...

  2. [转]DDX/DDV工作内幕

      DDX(动态数据交换)和DDV(动态数据验证) 看起来好象是在对话框中某控件和 某成员变量之间建立连接,自动实现控件和变量之间的数据转移.但这只是一个幻觉.它的实际工作方式是这样的:当你用Clas ...

  3. DDX和DDV工作内幕

    DDX和DDV工作内幕 本文转自:http://yebin100.spaces.live.com/blog/cns!FDE47F0C54FC403E!137.entry?sa=117455521 DD ...

  4. MFC项目实战(1)文件管理器--准备篇

    本程序主要实现如下功能: 程序通过左边的树形控件显示本地计算机中目录的结构,右边的列表控件则负责响应树形控件中选择的目录节点并把此节点中的所有项在列表框中显示出来,列表框支持奇偶行颜色设置,选中颜色设 ...

  5. 从新手小白入门MFC框架-黄强-专题视频课程

    从新手小白入门MFC框架-806人已学习 课程介绍         微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class li ...

  6. VC++程序设计与应用--对话框

    目录 前言 一.对话框 1.1 对话框概述 1.1.1  对话框的类型 1.1.2  对话框的CDialog类 1.1.3  对话框的组成 1.2 模态对话框 1.2.1 设计对话框模板资源 1.2. ...

  7. 不会有人不知道QT的历史吧

    1.什么是QT: Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开 ...

  8. Qt和wxWidgets 比较 以及其他GUI库

    这个,我个人觉得Qt比wxwidgets有前途多了,无论是资源还是人数,还是社区.关键是QT有商业公司和社区支持. 现在的QT无孔不入,win,linux,IOS,android,嵌入式板子,pyQT ...

  9. 企业级C++项目那些事(1):VSQt相关设置

    写在前面: 刚入职接收一个项目,mentor就把项目源码发给我们几个菜鸟,所分配的任务是做个Qt界面,这对之前从事深度学习算法研究的我着实有点棘手.至于为什么校招不招算法类的岗位,而专门找了个C++开 ...

最新文章

  1. 显著提升图像识别网络效率,Facebook提出IdleBlock混合组成方法
  2. MySQL的常用语法
  3. 未来的数据中心(一)
  4. Visual Studio 2019 安装教程 附免费安装包资源
  5. Tcpdump抓包工具的使用
  6. C++笔记-获取光标(非鼠标坐标)在屏幕的位置
  7. 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
  8. 前端组件化的三种方案:
  9. pong_计算机视觉与终极Pong AI
  10. 今天不知明天晚,独自面对心受伤
  11. Matlab信道容量的迭代计算实验
  12. oppor15android10怎么降级,OPPO R15系统降级教程_OPPO R15怎么回退到原来旧版本系统
  13. ASCII Binary
  14. ZBar源码分析(二)
  15. android键盘顶起布局原理,android如何把键盘弹出不影响布局?
  16. 蛇形矩阵之逆时针矩阵
  17. hyperparameters 超参数
  18. 任务提交SparkSubmit源码解析
  19. java 过滤关键字 自定义字典库
  20. DNS 服务与邮件服务器应用--配置DNS正向解析与反向解析

热门文章

  1. 老兵不死只会凋零——软件不会造不出,只会落后和凋零
  2. C++实现日志功能:log4cplus(Win10+VS2017)
  3. 通信技术中常见缩略语
  4. [渝粤教育] 南宁职业技术学院 走进东盟 参考 资料
  5. IIS7 设置网站默认主页(首页)
  6. 2023年天津市大学软件学院专升本专业课考试成绩查询时间的通知
  7. XSS(跨站脚本攻击)
  8. IP地址的ABCDE类划分
  9. 开展智慧旅游建设 打造城市个性化名片
  10. centos 安装 宋体新宋体