现象:MFC制作ActievX控件时 属性为VARIANT_BOOL时 get的返回值传递到客户端总是为TRUE。
原因:传递过程中MFC做了转换,但是VARIANT_BOO为short型,MFC确当成了DWORD来转换,所以导致转换后总为TRUE。(VC2003下参考oledisp1.cpp中1100行)。办法:将get的返回值该为 DWORD型。
另外set的值与VARIANT_TRUE,VARIANT_FALSE的定也不同,
正确使用如下例所示:
声明:DWORD GetFlat1(void);
void SetFlat1(VARIANT_BOOL newVal);
定义:DWORD CbuttonST1Ctrl::GetFlat1(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
if (m_bIsFlat)
{
return VARIANT_TRUE;
}
else
{
return VARIANT_FALSE;
}
}
void CbuttonST1Ctrl::SetFlat1(VARIANT_BOOL newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加属性处理程序代码
if (newVal==1)
{
m_bIsFlat=TRUE;
}
if (newVal==0)
{
m_bIsFlat=FALSE;
}
InvalidateControl();
SetModifiedFlag();
}