Share via


對話方塊資料交換

如果您使用 DDX 機制,通常您會在 OnInitDialog 處理常式或對話方塊建構函式中,設定對話方塊物件成員變數的初始值設定。 在顯示對話方塊之前,架構的 DDX 機制會立即將成員變數的值傳送至對話方塊中的控制項,當對話方塊本身出現以回應 DoModalCreate 時,就會顯示這些變數。 OnInitDialogCDialog 預設實作會呼叫類別 UpdateDataCWnd 成員函式,以初始化對話方塊中的控制項。

當使用者按一下 [確定] 按鈕時,相同的機制會將值從控制項傳輸至成員變數(或每當呼叫 UpdateData 成員函式時使用引數 TRUE )。 對話方塊資料驗證機制會驗證您所指定驗證規則的所有資料項目。

下圖說明對話方塊的資料交換。

Diagram of data model and on screen dialog box data exchange.
對話方塊資料交換

UpdateData雙向運作,如傳遞給它的 BOOL 參數所 指定。 若要執行交換,UpdateData 會設定 CDataExchange 物件並呼叫您對話方塊類別中 CDialogDoDataExchange 成員函式的覆寫。 DoDataExchange 會採用 CDataExchange 類型的引數。 傳遞至 CDataExchangeUpdateData 物件表示交換的內容,定義如交換方向等此類資訊。

當您 (或程式碼精靈) 覆寫 DoDataExchange 時,請指定每個資料成員 (控制項) 的 DDX 函式的呼叫。 每個 DDX 函式會根據 CDataExchange 傳遞給 DoDataExchangeUpdateData 引數所提供之內容,得知如何進行雙向的資料交換。

MFC 提供許多 DDX 函式,以進行不同種類的交換。 下列範例顯示呼叫兩個 DDX 函式和一個 DDV 函式的 DoDataExchange 覆寫:

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 。 在這種情況下,對話方塊和對話方塊物件之間不會進行資料交換。

另請參閱

對話方塊資料交換和驗證
在 MFC 中使用對話方塊
對話方塊資料驗證