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

相關詞條

熱門詞條

聯絡我們