DDX 机制,则通常在 OnInitDialog 处理程序或对话框
构造函数中设置对话框对象
成员变量的初始值。在对话框即将显示前,
框架的 DDX 机制将
成员变量的值传输给对话框中的控件,当对话框本身为响应 DoModal 或 Create 而出现时,这些值即出现在该对话框中。CDialog 中 OnInitDialog 的默认实现调用 CWnd 类的 UpdateData 成员函数以初始化对话框中的控件。
编程术语,Dialog Data Exchange 。
MSDN中关于DDX的说法:If you use the DDX mechanism, you set the initial values of the dialog object’s member variables, typically in your OnInitDialog handler or the dialog constructor. Immediately before the dialog is displayed, the framework’s DDX mechanism transfers the values of the member variables to the controls in the dialog box, where they appear when the dialog box itself appears in response to DoModal or Create. The default implementation of OnInitDialog in CDialog calls the UpdateData member function of class CWnd to initialize the controls in the dialog box.
这段话的大体意思是:
阐释了对话框数据交换。
对话框数据交换
正如传递给它的 BOOL 参数所指定的那样,UpdateData 进行双向交换。为了执行交换,UpdateData 设置
CDataExchange 对象并调用对话框类对 CDialog 的 DoDataExchange 成员函数的重写。DoDataExchange 采用
CDataExchange 类型的参数。传递给 UpdateData 的
CDataExchange 对象表示交换的上下文,它定义交换方向等信息。
当您(或某个代码向导)重写 DoDataExchange 时,也就指定了对每一数据成员(控件)的一个 DDX 函数的调用。UpdateData 传递给您的 DoDataExchange 一个
CDataExchange 参数,每个 DDX 函数都知道如何根据该参数所提供的上下文在两个方向交换数据。
MFC 提供许多用于不同交换类型的 DDX 函数。下例显示一个 DoDataExchange 重写,其中调用了两个 DDX 函数和一个 DDV 函数:
void CMyDialog::DoDataExchange(
CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX); // Call base class version
DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVar);
DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
DDV_MaxChars(pDX, m_strName, 20);
}
DDX_ 行和 DDV_ 行是数据映射。显示的示例 DDX 和 DDV 函数分别用于
复选框 (CheckBox) 控件和编辑框控件。
如果用户取消有
模式对话框,则 OnCancel 成员函数终止该对话框,并且 DoModal 返回 IDCANCEL 值。在此情况下,对话框和对话框对象之间不进行任何数据交换。