出处:http://m.blog.csdn.net/blog/weiqubo/8179167

DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实现。 永远不要直接调用这个函数,而是通过UpdateData(TRUE/FALSE)实现控件与变量之间值的传递。

当然你也可以不使用DoDataExchange而完成控件与变量之间值的传递,如:

通过GetWindowText和SetWindowText等等函数完成String变量与Edit控件之间的数据交互,

DDX/DDV
    通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX/DDV。
    数据交换和验证仅仅应用于为之选定了Value类别的成员变量。也就是CString,BOOL,数字,COleDateTime或COLeCurrency。
    对话框数据交换负责数据在控件中的进出。当对话首次出现的时候,每个控件窗口自动用相应的成员变量的值进行初始化。当用户通过单击OK按钮,或通过按Enter键关闭对话的时候,该控件无论是包含哪一个值或文本,都将被复制回该变量。
    对话数据验证可以确保值落在规定的限制之内。交换和验证机制都是由MFC框架提供的。每个函数都有一个前缀DDX_或DDV_,来把它作为数据交换或数据验证函数来标识。
1. 对话数据交换(DDX)
    常见的对话数据交换函数
   (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,             获得/设置的数据类型:CString  or 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。

2.对话数据验证(DDV)对话数据验证函数,它们仅仅应用于接受用于从键盘输入数据的控件成员变量。换言之,就是编辑控件和组合框。
    对话数据验证函数
   (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中的DDX和DDV相关推荐

  1. VC++中的DDX和DDV

    DDX/DDV        通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX ...

  2. VC/MFC DDX和DDV机制介绍

    VC/MFC DDX和DDV机制介绍 C++的MFC类库中为用户提供了在对话框控件和数据变量间交换数据的         DDX/DDV(数据交换/数据验证)机制,而在此之前,用户只能通过调用     ...

  3. MFC中的CAsyncSocket类实现网络通信

    近年来,利用Internet进行网际间通讯,在WWW浏 览.FTP.Gopher这些常规服务,以及在网络电话.多媒体会议等这些对实时性要求严格 的应用中成为研究的热点,而且已经是必需的了.Window ...

  4. MFC中使用TAB Control控件

    2019独角兽企业重金招聘Python工程师标准>>> MFC中使用TAB Control控件 MFC中使用TAB Control控件(转) 假如我现在有个SDI程序,View是Fo ...

  5. MFC中的DoDataExchange(CDataExchange *pDX)

    DoDataExchange(CDataExchange *pDX) 在对话框中有这么一个函数 其作用是与对应的变量交换对话框数据 MSDN 解释为: Called by the framework ...

  6. DDX和DDV工作内幕

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

  7. MFC中文件打开与保存

    1.文件打开与保存 // NotePad01Dlg.cpp : implementation file //#include "stdafx.h" #include "N ...

  8. 在ODBC中应用DDX和RFX

    在ODBC中应用DDX和RFX        MFC中ODBC类库简介 ---- MFC 中 针 对ODBC 数 据 库 编 程 提 供 了 五 种 基 类. 这 些 类 封 装 了 有 关ODBC ...

  9. MFC中快速应用OpenCV(转)

    转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...

最新文章

  1. ReflectionLabel(倒影控件)
  2. Android期末考试题
  3. MySQL存储过程之事务管理
  4. 中等职计算机应用基础,中等职业计算机应用基础答案
  5. 20 Valid Parentheses
  6. A. Red and Blue Beans
  7. mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
  8. linux C++获取当前文件所在路径的方法
  9. 华为网络技术培训笔记之常用网络工具(一)
  10. Linux中/etc/init.d
  11. linux内存中的文件权限,理解Linux文件权限
  12. 面向对象三大特性——多态
  13. Java8新特性:接口
  14. js微信监听返回_Node.js入门
  15. 2021年JAVA多线程并发编程面试题(持续更新)
  16. HTML学生个人网站作业设计——HTML+CSS+JavaScript简单的大学生书店网页制作(13页) web期末作业设计网页 web结课作业的源码 web网页设计实例作业
  17. 随机摄动法 matlab 随机振动,基于随机摄动法的齿轮系统动态响应及灵敏度分析...
  18. iOS自定义身份证键盘
  19. 还在为电脑装机而发愁吗?想摆脱装机时的捆绑软件吗?赶紧戳进来瞅瞅
  20. 虾皮广告怎么投放?——成都扬帆际海教育咨询

热门文章

  1. mac jemer 安装
  2. 大一学生HTML期末作业 【html体育羽毛球6页面带注册】学生网页设计作业源码
  3. yshon对讲机如何调频率_对讲机频率怎么调
  4. 对战平台有哪些和到底哪个好?
  5. 个人博客(威博)原创项目
  6. 2023年高新技术企业申报认定条件
  7. 虚拟串口服务器 源代码,进行ARM开发调试用的开源虚拟串口软件(有源代码)
  8. 01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础
  9. 元月元日是哪一天_元日指的是哪一天?
  10. 腐蚀rust厚板头盔_超厚板TC4钛合金电子束焊接接头应力腐蚀敏感性