在MFC中,CImage类提供了TransparentBlt函数来进行透明位图的绘制。TransparentBlt函数的原型如下:
BOOL TransparentBlt(
HDC hdcDest, // 目标设备上下文句柄
int xDest, // 目标矩形左上角的x坐标
int yDest, // 目标矩形左上角的y坐标
int nDestWidth, // 目标矩形的宽度
int nDestHeight, // 目标矩形的高度
HDC hdcSrc, // 源设备上下文句柄
int xSrc, // 源矩形左上角的x坐标
int ySrc, // 源矩形左上角的y坐标
int nSrcWidth, // 源矩形的宽度
int nSrcHeight, // 源矩形的高度
UINT crTransparent // 透明颜色
);
参数说明:
使用示例:
// 创建目标设备上下文
HDC hdcDest = ::GetDC(m_hWnd);
// 创建源设备上下文
HDC hdcSrc = ::CreateCompatibleDC(hdcDest);
// 加载源位图
CImage imgSrc;
imgSrc.Load(_T("source.bmp"));
// 将源位图选入源设备上下文
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hdcSrc, imgSrc);
// 绘制透明位图
TransparentBlt(hdcDest, 0, 0, nDestWidth, nDestHeight, hdcSrc, xSrc, ySrc, nSrcWidth, nSrcHeight, crTransparent);
// 恢复源设备上下文
::SelectObject(hdcSrc, hBmpOld);
// 释放源设备上下文
::DeleteDC(hdcSrc);
// 释放目标设备上下文
::ReleaseDC(m_hWnd, hdcDest);
需要注意的是,透明位图是通过指定crTransparent参数来实现的,这个参数表示源位图中要透明的颜色。在实际使用中,需要根据源位图的具体情况来确定透明颜色的值。