天天看點

MFC對話框控件資料提取之DoDataExchange()

對于這個函數,MSDN是這樣描述的:Called by the framework to exchange and validate dialog

data.

大意是架構調用此函數來改寫與确認對話框資料。 

到是看了下DoDataExchange函數裡的DDX型函數,似乎明白了DoDataExchange函數的作用。

比如你設計一個遊戲,在結束之後彈出個對話框,需要你輸入大名,進而儲存你結果分數的紀錄(如圖1),這時你就要在這個對話框類裡添加一個變量,來提取文本框輸入時的使用者名。假設你的對話框ID為IDD_USERNAME_DIALOG,對應類為CUserDialog(UserDialog.cpp,UsernDialog.h),文本框控件的ID為IDC_USER_EDIT,為對話框類添加CString變量m_username,再用DoDataExchange函數将它綁定到你的動态按扭中,比如:DDX_Text(pDX,IDC_USER_EDIT,

m_username);這就是将m_username(這是一個外部變量,其定義在對話框的構造函數裡)綁定到IDC_USER_EDIT中。 

void CUserDialog::DoDataExchange(CDataExchange*

pDX) 

    CDialog::DoDataExchange(pDX); 

    DDX_Text(pDX, IDC_USER_EDIT, m_username); 

    DDV_MaxChars(pDX,m_username,10); //将使用者名的最大長度控件在10個字元

DDX:Dialog Data Exchange 表示對話框資料交換

DDV:Dialog Data Valid

表示對話框資料有效性

總之,這個函數對了解MFC架構是很有用的。對于寫控件也是很有用的。 

good good study,day day up..... 

UpdataData函數内部調用了DoDataExchange。該函數隻有一個布爾型參數,它決定了資料傳送的方向。調用UpdateData(TRUE)将資料從對話框的控件中傳送到對應的資料成員中,調用UpdateData(FALSE)則将資料從資料成員中傳送給對應的控件。 

UpdateData(FALSE)是将變量的值傳到控件. 

UpdateData(TRUE)是從控件中取值到關聯的變量 

DoDataExchange會被架構調用,用來改變和驗證對話框的資料。在這個函數中一般是将控件和某些變量關聯,當在其它地方改變量的值,通過UpdateData 進行雙向交換。如: 

UpdateData();//将控件的值傳給變量 

m_username= "風中在飄牛";//分别為控件的變量指派 

UpdateData(FALSE);//将變量的值傳給控件 

繼續閱讀