void CGameDIB::TransparentBlt(HDC hdcDest, int iDestX, int iDestY, int iDestWidth, int iDestHeight,
HDC hdcSource, int iSourceX, int iSourceY, int iSourceWidth, int iSourceHeight,UINT Tcol)
{
// 1. 建立图形资源
HBITMAP hbitmapMem = ::CreateCompatibleBitmap(hdcDest, iDestWidth, iDestHeight);
HBITMAP hbitmapMask = ::CreateBitmap(iDestWidth, iDestHeight, 1, 1, NULL); // 创建单色掩码位图
HDC hDCMem = ::CreateCompatibleDC(hdcDest);
HDC hdcMask = ::CreateCompatibleDC(hdcDest);
HBITMAP oldBMPMem = (HBITMAP)::SelectObject(hDCMem, hbitmapMem);
HBITMAP oldBMPMask = (HBITMAP)::SelectObject(hdcMask, hbitmapMask);
// 2. 拷贝或压缩拷贝源DC中的位图到内存DC中
if (iSourceWidth == iDestWidth && iSourceHeight == iDestHeight)
::BitBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcSource, iSourceX, iSourceY, SRCCOPY);
else
::StretchBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcSource, iSourceX, iSourceY, iSourceWidth,iSourceHeight, SRCCOPY);
// 3.生成掩码位图
::SetBkColor(hDCMem, Tcol); // 设置掩码图中白色的对应RGB,若无则生成全黑。
::BitBlt(hdcMask, 0, 0, iDestWidth, iDestHeight, hDCMem, 0, 0, SRCCOPY); // 生成掩码位图
::SetBkColor( hDCMem, RGB(0, 0, 0) );
::SetTextColor(hDCMem, RGB(255, 255, 255) );
::BitBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcMask, 0, 0, SRCAND); // 黑色背景的人物
// 4.透明显示
::SetBkColor(hdcDest, RGB(255, 255, 255) );
::SetTextColor(hdcDest, RGB(0, 0, 0) );
::BitBlt(hdcDest, iDestX, iDestY, iDestWidth, iDestHeight, hdcMask, 0, 0, SRCAND); // 生成掩码洞
::BitBlt(hdcDest, iDestX, iDestY, iDestWidth, iDestHeight, hDCMem, 0, 0, SRCPAINT); // 透明效果
// 5.释放图形资源
::SelectObject(hDCMem, oldBMPMem);
::DeleteDC(hDCMem);
::DeleteObject(hbitmapMem);
::SelectObject(hdcMask, oldBMPMask);
::DeleteDC(hdcMask);
::DeleteObject(hbitmapMask);
}