VC++的DDX/DDV机制

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函数的顺序实现了控制和
        数据变量的数据交换。

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值