編程術語 ,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 值。在此情況下,對話框和對話框對象之間不進行任何數據交換。