在Windows XP 中实现半透明效果并不是件难事,仅仅只需要调SetLayeredWindowAttributes函数即可。如果同样的效果也想在Windows CE 中重现呢?因为Windows CE没有SetLayeredWindowAttributes 函数,不过在Windows CE 5.0开始支持AlphaBlend,该函数的作用是将两个HDC根据一定的比例混合,即有了类似半透明的效果。
知道了有这个函数,我们现在就应该来看看这个函数怎么用。查阅MSDN,该函数定义为:
BOOL AlphaBlend(
HDC hdcDest,// 指向目标设备环境的句柄
int nXOriginDest,// 指定目目标矩形区域左上角的X轴坐标
int nYOriginDest,// 指定目标矩形区域左上角的Y轴坐标
int nWidthDest,// 指定目标矩形区域的宽度
int nHeightDest,// 指向目标矩形区域高度的句柄
HDC hdcSrc, //指向源设备环境的句柄
int nXOriginSrc,// 指定源矩形区域左上角的X轴坐标
int nYOriginSrc,// 指定源矩形区域左上角的Y轴坐标
int nWidthSrc,// 指定源矩形区域的宽度
int nHeightSrc,// 指定源矩形区域的高度
BLENDFUNCTION blendFunction //指定用于源位图和目标位图使用的alpha混合功能
);
要能想正常的使用这个函数还必须做一件事件将Windows.h和Coredll.lib加载到你的工程里去。
做好了这些事情钱准备了,可以编译你工程的了。幸运的话能够顺利通过编写,不幸的话将出现下列提示错误:
“error C3861: 'AlphaBlend': identifier not found”函数没有定义,是不是很奇怪我们明明把头文件和Library都包含到我们的工程里怎么会没有定义呢?是不是很纳闷?
不要郁闷,那不是你的工程的问题而是系统的问题!在定制WINCE系统DE 时候有一个选项需要注意:如下图:
如果你想用AlphaBlend来绘制透明效果就必须将这一项选上。