DoDataExchange,UpdateData

來源:互聯網
上載者:User

對於這個函數,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)是從控制項中取值到關聯的變數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.