种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

DDX(对话框数据交换)

(2020-05-26 09:31:38) 百科综合

DDX(对话框数据交换)

DDX 机制,则通常在 OnInitDialog 处理程式或对话框构造函式中设定对话框对象成员变数的初始值。在对话框即将显示前,框架的 DDX 机制将成员变数的值传输给对话框中的控制项,当对话框本身为回响 DoModal 或 Create 而出现时,这些值即出现在该对话框中。CDialog 中 OnInitDialog 的默认实现调用 CWnd 类的 UpdateData 成员函式以初始化对话框中的控制项。

当用户单击“确定”按钮(或任何时候调用参数为 TRUE 的 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 值。在此情况下,对话框和对话框对象之间不进行任何数据交换。

标 签

搜索
随机推荐

Powered By 种豆资源网||