C++的MFC类库中为用户提供了在对话框控件和数据变量间交换数据的
        DDX/DDV(数据交换/数据验证)机制,而在此之前,用户只能通过调用
        GetDlgItemInt或etDlgItemText等函数这样麻烦的过程来达到同样的目的。
        当你要为控制增加DDX/DDV支持时,APP WIZARD和CLASS WIZARD将为你完成
        大部分工作。你只需要在CLASS WIZARD中为你的控制ID添加一个数据变量,
        然后在程序中适当的地方调用UpdateData函数。
            UpdateData接一个BOOL值的参数,为TRUE时将控制中的数据传到变量中,
        FAULSE表示把变量中的数据传到控制中。但UpdateData并不直接完成有关
        DDX/DDV机制的有关操作,它通过调用一个DoDataExchange函数实现。
        DoDataExchange将调用实际完成对话框所要求的所有DDX和DDV操作有关的
        DDX和DDV函数。
             当你为控制创建一个数据变量时,CLASS WIZARD将自动为你生成三块
        代码:它们被用来定义和初始化与控制结合在一起的变量。一旦在应用程
        序执行过程中发出了一个DDX或DDV消息,应用程序将使用这三块代码中的
        信息来定位,然后执行指定的代码。
             
              1 AFX_DATA代码块
              AFX_DATA代码块是CLASS WIZARD用来说明与控制结合在一起的变量
        的代码块。在相应的头(*.H)中,它出现在类的说明中。如:
        //DIALOG DATA
                //{{AFX_DATA(CAPPDIALOG)
                enum{IDD=IDD_DIALOG1};
                CButton   m_btnCopy;
                CString  m_editName;
                CString  m_showName;
                //}AFX_DATA
              
                2 AFX_DATA_INIT代码块
               AFX_DATA_INIT代码块对与控制结合在一起的变量进行初始化。在
        相应的*.CPP文件中,它出现在类的构造函数中。如:
        CAPPDIALOG::CAPPDIALOG(CWnd *nParent /*=NULL*/)
                        :CDialog(CAPPDIALOG::IDD,pParent)
        {
                //{{AFX_DATA_INIT(CAPPDIALOG)
                        m_editName=" ";
                        m_showName=" ";
                //}AFX_DATA_INIT
        }
              上例中,与m_editName和m_showName变量结合在一起的编辑框将被
        初始化为空的文本字符串。你也可以对其修改而轻松的以其他方式对其
        进行初始化。
               
                3 AFX_DATA_MAP代码块
               AFX数据映像通常出现在DoDataExchange函数中,它是一个CWnd成员
        函数,通常会被替换掉。比如在头文件中声明了:
        virtual void DoDataExchange(CDataExchange * pDX);
        则在CPP文件中如下实现:
        void CAPPDIALOG::DoDataExchange(CDataExchange * pDX)
                {
                CDialog:: DoDataExchange( pDX);
                //{{AFX_DATA_MAP(CAPPDIALOG)
                DDX_Control(pDX,IDC_COPY,m_btnCopy):   
                DDX_Text(pDX,IDC_EDIT_NAME,m_editName);
                DDV_MaxChars(pDX,m_editName,28);
                DDX_Text(pdx,IDC_SHOW_NAME,m_showName);
                //}}AFX_DATA_MAP
                }
                如例子所示,这个DoDataExchange函数公进行了四次DDX/DDV调用,
        它们是由MFC库提供的。参数pDX是一个指向数据交换对象的指针--数据交换
        对象是一个属于CDataExchange类的MFC对象。在这里,你可以编写专门的DDX
        和DDV函数,来以某种特殊的方式处理数据交换或数据验证。

这三块程序段实现了DDX/DDV机制和应用程序的接口,应用程序循着
        UpdateData函数--DoDataExchange函数--DDX/DDV函数的顺序实现了控制和
        数据变量的数据交换。

VC++的DDX/DDV机制相关推荐

  1. VC中DDX/DDV自定义

    DDX用于控件与变量的数据交换.DDV用于对数据交换后的变量进行校验,倘若校验失败将抛出异常导致Updata后面部分不能正常执行.必要时需要对Updata的返回值进行判断.     对于数据交换,需要 ...

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

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

  3. DDX DDV 用法

    DDX:Dialog Data Exchange 如果使用DDX机制,一般会在OnInitDialog消息处理函数或Dialog构造函数中,为对话框对象的成员变量设置了初始值.在对话框显示前,框架的D ...

  4. MFC 中DDX DDV 解疑

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

  5. DDX/DDV工作内幕

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

  6. VC++/MFC消息映射机制(1):MFC消息映射原理

    VC++/MFC消息映射机制(1):模仿MFC的消息映射原理 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) <C++语法详解>网盘地址:https://p ...

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

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

  8. VC编程Windows消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数

    VC6标准WIN32程序,Windows消息处理机制: 1.在注册窗口类时,指定了消息处理函数WndProc(). 2.WinMain()里有消息循环: while (GetMessage(& ...

  9. MFC中使用TAB Control控件

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

最新文章

  1. iOS 自定义UITabBar
  2. MVC框架内容-模型
  3. PHP开发者应了解的24个库
  4. 初中数学分几个模块_【初中数学】8大模块61个必考易错知识点!
  5. 揭秘网络:互联网调查入门 出版发行时间_cqy、cdx、zqsg……啥意思?揭秘QQ上的“00后黑话”...
  6. Atitit.导出excel报表的设计与实现java .net php 总结
  7. 「干货」模拟信号和数字信号的差异
  8. Linux基础知识总结
  9. Aria2Android 免root,安卓不需root用aria2搭建NAS方法
  10. 2010年11月30日
  11. 什么是DNS,作用是什么?
  12. 使用广和通L610模块搭配RT-Thread操作系统连接onenet云
  13. java vad,VAD和CNG的总结
  14. 天线要设计为四分之一波长的原因
  15. Android P使用pm install安装apk报错
  16. microsoftfixitoffice官方清理软件_电脑卡?试试这几款电脑必备清理优化软件
  17. java里面add报错,java错误
  18. 计算机开机出现ROM,电脑无法开机并显示EXITING INTEL PXE ROM如何解决
  19. 人工智能和AI到底是什么??浅谈人工智能和AI
  20. fprintf()函数的使用

热门文章

  1. sed 替换行中 转义单引号
  2. signature=4623c3d3408491ef6534d11dfcfda77e,绒山羊寄生虫病的暴发与诊治
  3. Git 远程操作详解(再不会 Git 就真的没团队收你了,嗯哼)
  4. 京东数科、携程、万科、思捷环球、歌帝梵、巴斯夫等公司高管变动
  5. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第4章 面向对象(下)
  6. macOS Monterey 12.6.6 (21G646) 正式版发布,ISO、IPSW、PKG 下载
  7. 如何解决问题恢复现状?
  8. Zemax操作34--鲍威尔棱镜激光整形
  9. postgresql 从一个日期或时间型的字段内抽取年、月、日、时、分、秒数据
  10. docker 离线安装dotnet3.1镜像