VC..解释一下代码

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:39:02
//**************************************************
// TransparentBlt2 (......)透明显示
// 根据关键色,将hdc1中的图形在hdc0中
// 自动生成掩模,并生成透明图形。
//注:TransparentBlt(......)是一个WIN API函数,功能和这里的相同。在WIN2000和
// 以后的系统上可用。在WIN98中有严重的资源泄漏,根本不能用。
// 所谓的资源泄漏:
// 你把下面TransparentBlt2最后6句注释掉就可看到。
// 要使用TransparentBlt(......)前,请引用:
// #include <wingdi.h>
// #pragma comment (lib,"msimg32.lib")
//**************************************************
void TransparentBlt2( HDC hdc0, // 目标DC
int nX0,int nY0,// 目标偏移
int nW0,int nH0,// 目标宽高度
HDC hdc1, // 源DC
int nX1,int nY1,// 源起点
int nW1,int nH1,// 源宽高度
UINT Tcol // 透明色,COLORREF类型
) //透明显示[4章]
{//A、建立图形资源。
HBITMAP hBMP =CreateCompatibleBitmap(hdc0,nW0, nH0); //创建位图内存
HBITMAP mBMP =CreateBitmap(nW0,nH0,1,1,NULL); //创建单色掩码位图
HDC hDC =CreateCompatibleDC(hdc0); //创建设备句柄
H

void BltTransBmp(HDC hdc, COLORREF cTspColor, int cx, int cy, int width, int Hight, HBITMAP hBmp)
{
HDC mdc;
HBITMAP hMaskBmp;
hMaskBmp=CreateBitmap(width,Hight,1,1,NULL);
HDC hdcMask;
mdc = ::CreateCompatibleDC(hdc);
SelectObject(mdc,hBmp);
hdcMask=CreateCompatibleDC(hdc);
SelectObject(hdcMask,(HGDIOBJ)hMaskBmp);

SetBkColor(mdc,cTspColor);
BitBlt(hdcMask,0,0,width,Hight,mdc,0,0,SRCCOPY);
BitBlt(hdc,cx,cy,width,Hight,mdc,0,0,SRCINVERT);
BitBlt(hdc,cx,cy,width,Hight,hdcMask,0,0,SRCAND);
BitBlt(hdc,cx,cy,width,Hight,mdc,0,0,SRCINVERT);
DeleteObject(mdc);
DeleteObject(hdcMask);
}
这是我在编写一个2D游戏的时候自己写的一个函数,作用就是让载入的位图背景色透明!其实还是利用了BitBlt函数,只是方式不同,就是和背景进行与和或的操作让指定颜色透明显示!

楼上的朋友……你觉得DeleteObject会帮你释放你创建的DC么?要用DeleteDC才行啊……