数据交换的对话框
如果使用 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。 在这种情况下,数据中没有交换在对话框和对话框对象之间。