函式說明
UpdateData() 是MFC的視窗函式,用來刷新數據的。
總的來說:作業系統會調用這個函式來初始化對話框中的數據,或者檢索或者驗證對話框中的數據。
函式原型
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
參數說明
bSaveAndValidate:標明那對話框是初始化(FALSE)還是數據恢復(TRUE)。
函式使用
UpdateData()參數只有一個,默認為TRUE。
UpdateData(TRUE)
——刷新控制項的值到對應的變數。(外部輸入值交給內部變數)
即:控制項的值—>變數。
UpdateData(FALSE)
—— 拷貝變數值到控制項顯示。(變數的最終運算結果值交給外部輸出顯示)
即:變數值—>控制項顯示。
例如,視窗中用 DDX_Text(pDX, IDC_EDIT1, m_usercode);
將IDC_EDIT1編輯框控制項與m_usercode變數做了關聯,如果修改m_usercode之後要想對應控制項顯示更改,則需要調用UpdateData(FALSE);反之在IDC_EDIT1的oneditchanged()中需要加入UpdateData(TRUE);
簡單地說,如果UpdateData(TRUE) == 將控制項的值賦值給成員變數,即從視窗編輯框中讀入數據;UpdateData(FALSE) == 將成員變數的值賦值給控制項,將數據從視窗顯示。
實例說明:
例如我們在對話框視窗中添加了3個editbox,然後將前兩個的值相加,然後在第三個editbox中輸出。
那么我們可以做如下處理:
1。用類嚮導在3個editbox下添加3個變數,我們命名為m_num1,m_num2,m_num3。
2。然後我們可以多添加一個button控制項,在其的click處理事件中,添加以下代碼:
UpdateData();// 默認的預設參數為TRUE,這樣,將EditBox控制項的內容讀入到與其關聯的變數中
m_num3 = m_num1+m_num2;
UpdateData(FALSE);// 將變數的值,輸出到與其關聯的EditBox中
就可以了
函式返回值說明
bool類的函式,如果,所需數據設定了範圍。
合法返回1,否則返回0
函式使用注意點:
當你使用UpdateData()函式的時候,你要清楚一個重要的點,那就是它的範圍是你調用它的類所代表的框架中生效。舉個例子:我們有一個主對話框,然後在其中建立了三個標籤頁。三個標籤頁分別關聯了三個類。那么我們要在主對話框中使用標籤頁中關聯了一個編輯框的變數時,如果你使用UpdateData(false)的時候,你會發現沒有效果。你必須用標籤頁的類如CPage0 page0; page0.UpdateData(false);才會達到你的目的。
注意:1.用於數據交換的DoDataExchange函式是不能被直接調用的,必須通過調用UpdateData()函式來調用DoDataExchange函式。所以在用到控制項與關聯的成員變數交換數據時,要首先調用UpdateData()函式。
2.當模態對話框被創建時,在OnInitialDialog()函數裡framework自動的調用UpdateData(FALSE)。該函式的調用在對話框出現之前。而且在默認的接口函式OnOk()里也調用了該函式UpdateData(TRUE)來獲取數據,如果調用成功,將會關閉對話框。(如果單擊Cancel按鈕,就不會調用該函式)