如果使用 DDX 機制,則通常在 OnInitDialog 處理程序或對話框構造函數中設置對話框對象成員變量的初始值。在對話框即將顯示前,框架的 DDX 機制將成員變量的值傳輸給對話框中的控件,當對話框本身為響應 DoModal 或 Create 而出現時,這些值即出現在該對話框中。
CDialog 中 OnInitDialog 的默認實現調用 CWnd 類的 UpdateData 成員函數以初始化對話框中的控件。當用戶單擊“確定”按鈕或任何時候調用參數為 TRUE 的 UpdateData 成員函數)時,同樣是該機制將控件中的值傳輸到成員變量。對話框數據驗證機制將驗證您指定了驗證規則的任何數據項。 正如傳遞給它的 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 值。在此情況下
- ,對話框和對話框對象之間不進行任何數據交換。
本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1097056