在进行MFC的ActiveX控件编程时,肯定会遇到布尔型的属性。在VC7中对应的内部类型为VARIANT_BOOL,实际上是一个
short型的数据。实际使用过程中最容易碰到以下3个问题
1.在控件的
DoPropExchange(
CPropExchange*
pPX)中需要调用
PX_Bool函数,但是这个函数要求第3个参数为int型,可向导生成的变量就是VARIANT_BOOL型的,所以这里是需要进行强制类型转换的,例子如下:
if(pPX->
IsLoading())
{
PX_Bool(pPX, _T("CanFired"), (
int&)m_CanFired,
VARIANT_FALSE);
}
else
{
PX_Bool(pPX, _T("CanFired"), (
int&)m_CanFired);
}
2. 在代码的其他地方使用表示属性的变量时该如何确定其真假
3.属性页的问题
另附:
Windows 中BOOL变量常见的好几种类型:小写的bool,大写的BOOL ,还有VARIANT_BOOL 。
小写的bool 的是C++ 标准定义的布尔类型, 各个编译器处理的方式不同,Visual C++ 把bool 定为一个字节。小写的true 和 false 也都是C++ 标准定义的关键字。
大写的BOOL 是Windows 里面定义的布尔类型,实质上int, 在 windows 头文件面有定义:
typedef int BOOL;
#define TRUE 1
#define FALSE 0
#define FALSE 0
VARIANT_BOOL 是COM 使用的布尔类型, 其实质上是 short 类型:
typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
可以看出, 3中BOOL类型的长度不一样,而且TRUE 和 FALSE 的值也不同,在相互转换的时候需要注意。