這裏咱們說一下成員函數UpdateData。該函數帶有一個布爾類型的參數,若是該參數爲FALSE,函數UpdateData將成員變量的值傳遞給對話框的變量;而若是該參數爲TRUE,函數UpdateData將進行相反的過程。函數
若是用戶單擊了對話框中ID爲IDOK的按鈕,或者以TRUE爲參數調用函數UpdateData,DDX機制從控件中將值傳遞到成員變量,同時對話框數據驗證(dialog data validation,DDV)機制根據設定的驗證規則驗證全部數據項。在數據交換的過程當中,成員函數UpdateData先建立一個CDataExchange對象,而後調用對話框對類類CDialog成員函數DoDataExchange的重載版本。該CDataExchange對象將做爲成員函數DoDataExchange的一個參數,該參數定義了數據交換的上下文。在DoDataExchange中,咱們爲每個數據成員指定了一個對DDX函數的調用。每個函數定義了基於由成員函數UpdateData所提供的
CDataExchange參數所肯定的上下文而進行的雙向數據交換。對象
下面的代碼摘自實現文件DialogDemo.cpp中對函數DoDataExchange的
定義:
void CDialogDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialogDemoDlg)
DDX_Text(pDX, IDC_EDIT, m_strEdit);
DDV_MaxChars(pDX, m_strEdit, 50);
//}}AFX_DATA_MAP
}it
在兩行註釋//{{AFX_DATA_MAP和//}}AFX_DATA_MAP之間的代碼部分稱做數據映射。函數DDX_Text使用CString對象m_strEdit與ID爲IDC_EDIT的編輯框控件相關聯。函數DDV_MaxChars設置與編輯框控件IDC_EDIT相關聯CString對象m_strEdit的最大長度爲50。io
須要注意的是,若是用戶在模式對話框中單擊了「取消」(Cancel)按鈕,DoModal函數將返回值IDCANCEL,在這種狀況下,在對話框和對話框對象以前的數據交換不會發生。變量