以下內(nèi)容如果不明白,可以看一下孫鑫<<VC深入詳解>>教程第18課的"clock"控件實(shí)例,內(nèi)容摘自網(wǎng)友帖,因本人亦有此困惑,故記之。
我剛開始學(xué)習(xí)ActiveX開發(fā),使用MFC。我對(duì)ActiveX控件新增一個(gè)名為"Caption",類型為int的屬性.我在ActiveX的屬性頁上新增一個(gè)Edit control,想通過該Edit control來直接設(shè)置"Caption"屬性的值.
現(xiàn)在問題來了:
在VC6.0中開發(fā)時(shí)可以通過class wizard的"增加成員變量"來直接將該Edit control與"Caption"屬性關(guān)聯(lián).生成的代碼在DoDataExchange方法中如下:
void CCircPropPage::DoDataExchange(CDataExchange* pDX)
{
//{{AFX_DATA_MAP(CCircPropPage)
DDP_Text(pDX, IDC_CAPTION, m_caption, _T("Caption") );//(1)
DDX_Text(pDX, IDC_CAPTION, m_caption);
//}}AFX_DATA_MAP
DDP_PostProcessing(pDX);
}
其中(1)行的最一個(gè)參數(shù):_T("Caption") ,就是該Edit control所關(guān)聯(lián)的屬性名.
但
在VC++ 2005中,卻沒有直接將Edit control與屬性相關(guān)聯(lián)的功能.在VC++ 2005中在Edit
control上右擊,選擇"添加變量",打開"添加成員變量向?qū)?,但該向?qū)е荒芴砑优cEdit
control關(guān)聯(lián)的"成員變量",無法將該Edit control 與"Caption"屬性關(guān)聯(lián).VC++ 2005生成的代碼如下:
void CCircPropPage::DoDataExchange(CDataExchange* pDX)
{
//{{AFX_DATA_MAP(CCircPropPage)
//DDP_Text(pDX, IDC_CAPTION, m_caption, _T("Caption") );//(1)//這是VC6生成的代碼,這里留作參照
//DDX_Text(pDX, IDC_CAPTION, m_caption);//這也是VC6生成的
//}}AFX_DATA_MAP
DDP_PostProcessing(pDX); //(2)
DDX_Text(pDX, IDC_CAPTION1, m_caption1);//<--(3) VC++產(chǎn)生的代碼.
}
其
中第(3)行為VC++
2005產(chǎn)生的代碼.它并沒有調(diào)用DDP_系列的函數(shù),也將代碼放在了AFX_DATA_MAP宏的外面、第(2)行的下面(第2行函數(shù)的功能為:結(jié)束屬
性值與Control的轉(zhuǎn)換),也就是說VC++ 2005并沒有將Edit control與屬性關(guān)聯(lián)的功能!??
雖然可以通過手動(dòng)添加方式解決,但我總覺得VC++ 2005應(yīng)該提供如此功能,不知道有沒有朋友遇到過與我相同的問題,如何解決之?
難道,正如別人所說,VC2005比VC6是一個(gè)退步。