PrepareCtrl(int nIDC); //返回指定ID的控制窗口的句柄

本文详细介绍了MFC中对话框数据交换和验证的过程,包括DoDataExchange函数的作用,DDX和DDV系列函数的使用,以及UpdateData函数在数据读写中的角色。通过对成员变量和控制窗口之间数据的交换,简化了程序员的工作。同时,文章讨论了不同关闭对话框函数的区别,如OnOk和OnCancel。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DoDataExchange(CDataExchange *pDX) 收藏
 

 在对话框中有这么一个函数

 其作用是与对应的变量交换对话框数据

 

MSDN 解释为:

 

     

Called by the framework to exchange and validate dialog data.

 
virtual void DoDataExchange(
   CDataExchange* pDX
);

pDX
A pointer to a CDataExchange object.

 

 

 

   对话框的数据交换是指如下两种操作:

 

   一是将内存数据写入对应的控制窗口

   一是从控制窗口中读取相应的数据并存储于内存变量中

  

  MFC为简化这些操作,以CDataExchange类和一些数据函数为基础,提供了一套数据交换和校验机制。

 

  数据交换的方法:

 

  首先,定义保存数据的内存变量----即给对话框添加成员变量,每个控制窗口可以对应一个成员变量。

           比如,对于对话框的一个编辑控制窗口,可以定义一个CEdit类型的成员变量,或一个CString 类型的成员变量

 

 

  第二, 重载对话框虚拟函数DoDataExchange,实现数据交换和验证

         

          在VC6.0中可以使用ClassWizard协助自动的添加成员变量,修改DoDataExchange。

 

         例如,一个对话框有两个窗口,一个是编辑框表示姓名,一个是编辑框表示年龄

 

         使用ClassWizard添加成员变量,一个定义为CEdit,另一个定义为int 这些定义被//{ {AFX_DATA   和 //}}AFX_DATA引用 ,表示是ClassWizard添加的,程序员不必修改它们

 

         相应的DoDataExchange实现如下:

 

         void CExDialog::DoDataExchange(CDataExchange* pDX)
    {
     CDialog::DoDataExchange(pDX);


     //{ {AFX_DATA_MAP(CFtpDialog)
     DDX_Control(pDX, IDC_NAME, m_name);
     DDX_Text(pDX, IDC_AGE, m_nAge);
     DDV_MinMaxInt(pDX, m_nAge, 1, 100);
     //}}AFX_DATA_MAP
   }

 

   以上函数,DDX的含义:

 

   DDX_Control 表示将 IDC_NAME 子窗口的内容传输到m_name,或者是将m_name的值传输到IDC_NAME子窗口

 

   DDX_Text    表示把 IDC_AGE  子窗口的内容按整数类型保存到 m_nAge,或者将m_nAge的值传输到IDC_AGE窗口更新显示

 

   DDV_MinMaxInt 表示m_nAge应该在1和100之间取值

 

    

      上面提到的DDX_XXX数据交换函数是可以进行双向的数据交换,那么它们如何知道数据的传输方向的呢?

 

      这通过DDX_XXXX函数的第一个参数pDX(也就是DoDataExchange的参数pDX)所指的CDataExChange对象决定,

 

       CDataExchange定义如下:

   

 class CDataExchange
{
// Attributes
public:
BOOL m_bSaveAndValidate; // TRUE 则 保存和验证数据
CWnd* m_pDlgWnd; // 指向一个对话框
// Operations (for implementors of DDX and DDV procs)
HWND PrepareCtrl(int nIDC); //返回指定

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值