M FC 编辑框的数据交换 分类: Win 程序开发2009-11-02 10:26805人阅读评论(0)收藏举报 对话框数据交换指以下两种动作,或者是把内存数据写入对应的控制窗口,或者是从控制窗口读取数据并保存到内存变量中。MFC 为了简化这些操作,以CDataExchange 类和一些数据交换函数为基础,提供了一套数据交换和校验的机制。 数据交换的方法 首先,定义保存数据的内存变量──给对话框添加成员变量,每个控制窗口可以对应一个成员变量,或者是控制窗口类型,或者是控制窗口表示的数据的类型。例如,对于对话框的一个编辑控制窗口,可以定义一个 CEdit 类型的成员变量,或者一个 CString 类型的成员变量。 其次,覆盖对话框的虚拟函数DoDataExchange,实现数据交换和验证。 ClassWizard 可以协助程序员自动地添加成员变量,修改 DoDataExchange。例如,一个对话框有两个控制窗口,其中的一个编辑框表示姓名,ID 是IDC_NAME,另一个编辑框表示年龄,ID 是IDC_AGE,ClassWizard 添加如下的成员变量: // Dialog Data //{{AFX_DATA(CExDialog) enum { IDD = IDD_DIALOG2 }; CEdit m_name; int m_iAge; //}}AFX_DATA 使用 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_ Control 表示把IDC_NAME 子窗口的内容传输到窗口m_name,或者相反。 DDX_ Text 表示把IDC_AGE 子窗口的内容按整数类型保存到m_nAge,或者相反。 DDV_MinMaxInt 表示m_nAge 应该在1和100之间取值。 CDataEx change 上文中提到DDX_Xxxxx 数据交换函数可以进行双向的数据交换,那么它们如何知道数据传输的方向呢?这通过 DDX_Xxxxx 函数的第一个参数 pDX(也就是 DoDataEx change 的参数 pDX)所指的CDataExchange 对象来决定,pDX 指向一个 CdataExchange 对象。CDataExchange 定义如下: class CDataExchange { // Attributes public: BOOL m_bSaveAndValidate; // TRUE...