C++ DDX(DoDataExchange..)控件和類成員的映射
Posted on 2010-08-11 14:38 幻海藍(lán)夢 閱讀(1756) 評論(0) 編輯 收藏 所屬分類: C++原文:http://blog.csdn.net/danforn/archive/2008/04/18/2305356.aspx
void CRegisterDialog::DoDataExchange(CDataExchange* pDX)
...{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRegisterDialog)
DDX_Control(pDX, IDC_INCOME, m_ctrlIncome);
DDX_LBString(pDX, IDC_INCOME, m_strIncome);
DDX_CBString(pDX, IDC_KIND, m_strKind);
DDX_Check(pDX, IDC_MARRIED, m_bMarried);
DDX_Text(pDX, IDC_NAME, m_strName);
DDX_Radio(pDX, IDC_SEX, m_nSex);
DDX_Text(pDX, IDC_UNIT, m_strUnit);
DDX_Radio(pDX, IDC_WORK, m_nWork);
DDX_Text(pDX, IDC_AGE, m_nAge);
DDV_MinMaxUInt(pDX, m_nAge, 16, 65);
//}}AFX_DATA_MAP
}
可以看出,該函數(shù)中的代碼是由ClassWizard自動加入的。DoDataExchange只有一個(gè)參數(shù),即一個(gè)CDataExchange對象的指針pDX。在該函數(shù)中調(diào)用了DDX函數(shù)來完成數(shù)據(jù)交換,調(diào)用DDV函數(shù)來進(jìn)行數(shù)據(jù)有效檢查。
當(dāng)程序需要交換數(shù)據(jù)時(shí),不要直接調(diào)用DoDataExchange函數(shù),而應(yīng)該調(diào)用CWnd::UpdateData。UpdataData函數(shù)內(nèi)部調(diào)用了DoDataExchange。該函數(shù)只有一個(gè)布爾型參數(shù),它決定了數(shù)據(jù)傳送的方向。調(diào)用UpdateData(TRUE)將數(shù)據(jù)從對話框的控件中傳送到對應(yīng)的數(shù)據(jù)成員中,調(diào)用UpdateData(FALSE)則將數(shù)據(jù)從數(shù)據(jù)成員中傳送給對應(yīng)的控件。
在缺省的CDialog::OnInitDialog中調(diào)用了UpdateData(FALSE),這樣,在對話框創(chuàng)建時(shí),數(shù)據(jù)成員的初值就會反映到相應(yīng)的控件上。若用戶是按了OK(確定)按鈕退出對話框,則對話框認(rèn)為輸入有效,就會調(diào)用UpdataData(TRUE)將控件中的數(shù)據(jù)傳給數(shù)據(jù)成員。圖5.9描繪了對話框的這種數(shù)據(jù)交換機(jī)制。
自定義DoDataExchange函數(shù)
屬性頁DoDataExchange函數(shù)使程序員得以將屬性頁值與控件中的實(shí)際屬性值鏈接。若要建立鏈接,必須將適當(dāng)?shù)膶傩皂撟侄斡成涞剿鼈兏髯缘目丶傩浴?br />
使用屬性頁DDP_函數(shù)實(shí)現(xiàn)這些映射。DDP_函數(shù)的運(yùn)行與標(biāo)準(zhǔn) MFC對話框中使用的 DDX_函數(shù)相似,但有一處例外。除對成員變量的引用外,DDP_函數(shù)還使用控件屬性的名稱。下面是屬性頁的DoDataExchange函數(shù)中的一個(gè)典型項(xiàng)。
DDP_Text(pDX,IDC_CAPTION,m_caption,_T("Caption"));
此函數(shù)使用DDP_Text函數(shù)將屬性頁的m_caption成員變量與Caption相關(guān)聯(lián)。
插入屬性頁控件后,需要使用DDP_Text函數(shù)在屬性頁控件IDC_CAPTION與實(shí)際控件屬性Caption之間建立鏈接(如前所述)。
其他對話框控件類型(如復(fù)選框、單選按鈕和列表框)也可以使用DDP函數(shù)。表6-4列出了完整的屬性頁DDP_函數(shù)集及各函數(shù)的作用。
http://book.51cto.com/art/200708/54961.htm