以下内容如果不明白,可以看一下孙鑫<<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是一个退步。