DoDataExchange()

我不清楚,但好像這個引用解釋的不錯:http://k.pconline.com.cn/question/1686411.html 

對於這個函數,MSDN是這樣描述的:Called by the framework to exchange and validate dialog data.大意是框架調用此函數來改寫與確認對話框數據。 
反正我沒明白這句話的意思。 

到是看了下DoDataExchange函數裏的DDX型函數,彷佛明白了DoDataExchange函數的做用。最近看書的效果很明顯哇。 

按個人理解,DoDataExchange函數實際上是一項數據動態綁定技術。好比你在寫動態按扭過程當中須對按鈕添加變量時,怎麼添加?控件類已經寫好了,其變量是已經固定的。你要添加新的變量就要用到DoDataExchange函數。 

因此你要在對話框的構造函數裏面初始化一個變量,再用DoDataExchange函數將它綁定到你的動態按扭中,好比:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);這就是將m_Lesson1(這是一個外部變量,其定義在對話框的構造函數裏)綁定到IDC_CHECK1中。 

看下DDX_Check函數原型:void AFXAPI DDX_Check(CDataExchange* pDX, int nIDC, int& value);能夠看到m_Lesson並非真的添加到IDC_CHECK1控件裏了,注意這是int& value,只是一個值引用而已。差很少的意思就是這個變量被框架傳遞給控件了。控件只負責使用此變量 ,而不負責改寫此變量。-.- 

哈哈,寫到這裏,我也終於明白MSDN那句話的意思了,原來DoDataExchange函數是被框架與控件用來交流數據的。而裏面的DDX函數纔是動態綁定技術。 

值得注意的一點是:MSDN後面附加了一句 Never call this function directly. It is called by the UpdateData member function. Call UpdateData to initialize a dialog box’s controls or retrieve data from a dialog box.就是說此函數永遠不被直接調用,它只是呼叫UpdateData函數時纔會被調用。(由於每更新一次,它都須要從新綁定一次。是這樣子嗎?) 

總之,這個函數對理解MFC框架是頗有用的。對於寫控件也是頗有用的。 
good good study,day day up..... 


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

UpdateData(false)是將變量的值傳到控件. 
UpdateData(TRUE)是從控件中取值到關聯的變量 
html



網友評論不錯:http://www.cnblogs.com/flyingfish/archive/2007/03/21/682274.html  void CDlgSelectCS::DoDataExchange(CDataExchange* pDX)  {    CDialog::DoDataExchange(pDX);    DDX_Text(pDX, IDC_EDIT_SCR, m_ScrCS_Name);    DDX_Text(pDX, IDC_EDIT_DEST, m_DestCS_Name);  }  DoDataExchange會被框架調用,用來改變和驗證對話框的數據。在這個函數中通常是將控件和某些變量關聯,當在其它地方改變量的值,經過UpdateData 進行雙向交換。如:  UpdateData();//將控件的值傳給變量  m_ScrCS_Name = "Xian 1980.prj";//分別爲控件的變量賦值  UpateData(FALSE);//將變量的值傳給控件 
相關文章
相關標籤/搜索