描述
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後面附加了一句 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函式時才會被調用。
UpdateData函式內部調用了DoDataExchange。該函式只有一個布爾型參數,它決定了數據傳送的方向。調用UpdateData(TRUE)將數據從對話框的控制項中傳送到對應的數據成員中,調用UpdateData(FALSE)則將數據從數據成員中傳送給對應的控制項。
UpdateData(false)是將變數的值傳到控制項,表示對話框正在初始化.
UpdateData(TRUE)是從控制項中取值到關聯的變數, 表示數據正在獲取