数据交换的对话框
如果使用 DDX 机制,可以设置对话框对象的成员变量的初始值,通常在您的 OnInitDialog 处理程序或对话框构造函数。在对话框中显示之前,结构的 DDX 机制调用成员变量的值到对话框上的控件,则会出现对话框以响应 DoModal 或 创建。OnInitDialog 的默认实现在 CDialog 的调用类 CWnd 的 UpdateData 成员函数初始化对话框上的控件。
同一结构与控件调用值更改为成员变量,当用户单击 " 确定 " 按钮 (或者,只要调用带有参数 TRUE) 的 UpdateData 成员函数。对话框数据验证框架验证指定验证规则的所有数据项。
下图演示数据交换的对话框。
对话框数据交换
UpdateData 在两个方向工作,如指定由 BOOL 参数传递给它。若要将执行替换, UpdateData 设置 CDataExchange 对象并调用 entity_CODECDialog 的 DoDataExchange 成员函数您的对话框类的重写。DoDataExchange 采用类型 CDataExchange的参数。CDataExchange 对象传递给 UpdateData 表示该替换的上下文中,定义这类信息与该替换的方向。
当您 (或代码向导) 时重写 DoDataExchange,指定对每个数据成员 (控件) 一个 DDX 功能。每个 DDX 功能知道如何在基于上下文的双向交换数据提供 CDataExchange 参数传递到您的 DoDataExchangeUpdateData。
MFC 针对不同类型的替换提供了许多 DDX 功能。下面的示例演示两个 DDX 函数和一个 DDV 函数调用的 DoDataExchange 重写:
void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
DDV_MaxChars(pDX, m_strName, 20);
}
DDX_ 和 DDV_ 行绑定数据映射。该示例 DDX 和显示的 DDV 功能分别为选中 checkbox 控件和编辑框控件,。
如果用户取消模式对话框, OnCancel 成员函数终止对话框,并 DoModal 返回值 IDCANCEL。在这种情况下,数据中没有交换在对话框和对话框对象之间。