對話資料交換
如果您使用 DDX 機制時,您設定的初始值對話方塊中的物件的成員變數,通常會在您OnInitDialog處理常式或對話方塊的建構函式。 在對話方塊顯示之前,架構的 DDX 機制會將成員變數的值傳輸至] 對話方塊中,並顯示控制項,請立即出現對話方塊時本身以回應DoModal或建立。 預設實作OnInitDialog在CDialog呼叫UpdateData成員函式類別的CWnd初始化的對話方塊中的控制項。
相同的機制將值從控制項成員變數來當使用者按一下 [確定] 按鈕 (或每當您呼叫UpdateData與引數的成員函式 ,則為 TRUE)。 對話資料驗證機制會驗證任何資料項目,您可以替它指定驗證規則。
下圖說明了對話資料交換。
對話資料交換
UpdateData雙向所指定的 BOOL 參數傳遞給它。 若要執行 exchange, UpdateData設定CDataExchange物件和呼叫您的對話方塊類別會覆寫的CDialog的DoDataExchange成員函式。 DoDataExchange使用引數型別的CDataExchange。 CDataExchange物件傳遞至UpdateData代表交換,定義這類資訊的交換方向的內容。
當您 (或程式碼精靈) 覆寫DoDataExchange,您可以指定每個資料成員 (控制項) 的一個 DDX 函式的呼叫。 每個 DDX 函式知道如何交換兩個方向依所提供的內容資料CDataExchange引數傳遞給您DoDataExchange的UpdateData。
MFC 提供許多的 DDX 函式,針對不同種類的交換。 下列範例所示DoDataExchange在哪兩個 DDX 函式和一個 DDV 函式稱為 「 覆寫:
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 函式] 核取方塊控制項和一個編輯方塊控制項,分別為對齊。
如果使用者取消強制回應對話方塊中, OnCancel成員函式結束對話方塊並DoModal傳回的值 IDCANCEL。 在此情況下,對話方塊與對話方塊物件之間不交換任何資料。