透明位图的实现

透明位图的显示
包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数: TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另 一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。

一、TransparentBlt 函数的使用

TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下:

BOOL TransparentBlt(
HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int hHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
);

使用示例(在对话框的OnPaint函数中添加):
CPaintDC dc(this); //获得对话框的DC
//载入位图资源,开始透明绘制
CBitmap SampleBMP;
BOOL bSuccess = SampleBMP.LoadBitmap(IDB_BITMAP2);
CDC ImageDC;
ImageDC.CreateCompatibleDC(&dc);
CBitmap *pOldImageBMP = ImageDC.SelectObject(&SampleBMP);
TransparentBlt(dc.m_hDC, 0, 0, 48, 48, ImageDC.m_hDC, 0, 0, 48, 48, RGB(0x00,0x00,0x00));
ImageDC.SelectObject(pOldImageBMP);

二、补充内容
有关透明位图实现原理的文章参看附件文件夹中的透明位图显示.mht文件。
posted @ 2011-04-10 14:34  super119  阅读(292)  评论(0编辑  收藏  举报