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来关闭对话。

 

DDX和DDV——控件与变量之间值的传递的更多相关文章

  1. MFC中给控件添加变量,DoDataExchange中

    DoDataExchange函数其实是一项数据动态绑定技术.比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的.你要添加新的变量就要用到DoDataExchan ...

  2. atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系

    atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系 1. server控件是要server了解了标签.种类型的server控件: 1 1. ...

  3. MFC 如何为控件关联变量

    所关联的变量常见有两种,一种就是控件变量,一种就是数字变量. 为控件关联变量的方法也有两种,一种是通过软件工具添加,一种是手动添加代码. 软件工具添加,方便简单,但是根据软件的版本不同,以及不同的空间 ...

  4. WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问

    原文:WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问 1,在菜单中访问 弹出菜单的控件 var mi = sender as MenuItem;//菜单条目 MenuItem ...

  5. MFC 可编辑文本框,MFC控件关联变量总结

    Edit Control控件,默认状态下,按回车会调用OnOK()关闭窗体.解决此bug可以,类视图中单击CMFCApplication3Dlg,下方重写OnOK(),注释掉其中的代码即可. Edit ...

  6. jquery获取含有某元素的的控件 “控件名[属性名=值]”

    jquery获取含有某元素的的控件 “控件名[属性名=值]”. 如,获取 <input id="${cheackbox}" data-role="icheck&qu ...

  7. [转]ASP.NET MVC中的两个Action之间值的传递--TempData

    本文转自:ASP.NET MVC中的两个Action之间值的传递--TempData 一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在 ...

  8. mfc 控件添加变量

    关联控件变量 初始化数据 一.关联控件变量 .为Edit控件关联数值类变量 变量名 m_edt1_s .为Edit控件关联控件类变量 变量名 m_edt1_ctl 二.控件变量的使用 HWND h=: ...

  9. 梦想CAD控件系统变量说明

    这里介绍一些常用系统变量有String.double.long.McGePoint3d等类型,其中有部分系统变量是随图纸保存,再次打开时就会读取图纸中的系统变量,有些系统变量不随图纸保存,其作用来控制 ...

随机推荐

  1. Opencv— — Color Gradient

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  2. CTSC2012 熟悉的文章

    传送门 首先很容易想到对于所有的模式串建出广义后缀自动机,之后对于我们每一个要检查的文本串,先在SAM上跑,计算出来每一个位置能匹配到的最远的位置是多少.(就是当前点减去匹配长度) 之后--考虑DP- ...

  3. poj3417 Network——LCA+树上差分

    题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...

  4. HDU1083(最大匹配)

    Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  5. bzoj3456

    分治+ntt 设dp[i]表示i个点的图联通的方案数 那么考虑dp,利用容斥,总-不符合,枚举j=1->i-1,然后考虑不符合,那么考虑和1联通的连通块,剩下的不和1连通,那么dp[i]=2^t ...

  6. 一、mysql简述

    该套讲义参考动力节点郭鑫老师的mysql视频整理所得 1.DBMS--数据库管理系统  Data Base Management System eg: mysql数据库管理系统 2.DB--数据库/仓 ...

  7. 下载android sdk

  8. java如何写接口给别人调用

    参考:https://blog.csdn.net/greatkendy123/article/details/52818466 java web开发(二) 接口开发

  9. A - Mike and Cellphone

    While swimming at the beach, Mike has accidentally dropped his cellphone into the water. There was n ...

  10. 2.1-2.2 HBase数据存储

    一.HBase数据检索流程 一篇介绍HBase数据读写流程的解析的博文:http://hbasefly.com/2016/12/21/hbase-getorscan/?wsfatm=uqvhl3 1. ...