以下內容如果不明白,可以看一下孫鑫<<VC深入詳解>>教程第18課的"clock"控件實例,內容摘自網友帖,因本人亦有此困惑,故記之。
我剛開始學習ActiveX開發,使用MFC。我對ActiveX控件新增一個名為"Caption",類型為int的屬性.我在ActiveX的屬性頁上新增一個Edit control,想通過該Edit control來直接設置"Caption"屬性的值.
現在問題來了:
在VC6.0中開發時可以通過class wizard的"增加成員變量"來直接將該Edit control與"Caption"屬性關聯.生成的代碼在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)行的最一個參數:_T("Caption") ,就是該Edit control所關聯的屬性名.
但
在VC++ 2005中,卻沒有直接將Edit control與屬性相關聯的功能.在VC++ 2005中在Edit
control上右擊,選擇"添加變量",打開"添加成員變量向導",但該向導只能添加與Edit
control關聯的"成員變量",無法將該Edit control 與"Caption"屬性關聯.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++產生的代碼.
}
其
中第(3)行為VC++
2005產生的代碼.它并沒有調用DDP_系列的函數,也將代碼放在了AFX_DATA_MAP宏的外面、第(2)行的下面(第2行函數的功能為:結束屬
性值與Control的轉換),也就是說VC++ 2005并沒有將Edit control與屬性關聯的功能!??
雖然可以通過手動添加方式解決,但我總覺得VC++ 2005應該提供如此功能,不知道有沒有朋友遇到過與我相同的問題,如何解決之?
難道,正如別人所說,VC2005比VC6是一個退步。