如下一段文件是来自:
http://www.vckbase.com/document/viewdoc/?id=532 
关于透明位置的显示——王骏
实现TransparentBlt函数
为了理解具有透明色位图的绘制过程,我们来亲手建立一个具有同TransparentBlt功能一致的实验函数,称之为TransparentBlt2。实验素材:有两张位图:bk.bmp是背景位图,football.bmp包含透明区域,透明色为蓝色RGB(0,0,0xff)
实验目的:以bk.bmp为背景,将football.bmp绘制到背景中,形成如下的最终效果图。
2.1 透明位图绘制原理
假设football.bmp ->载入 HBITMAP hImageBMP -> 选入 HDC hImageDC2.1.1 生成足球的单色掩码位图,透明区域为白色(全1),非透明区域为黑色(全0) HBITMAP hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 建立单色位图
SetBkColor(hImageDC, RGB(0,0,0xff)); // 设置背景色为蓝色
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 拷贝到hMaskDC这样足球位图中蓝色区域在掩码位图中成了白色,其它区域为黑色,此时hMaskBMP 如下图:
 (图一)
2.1.2 设置背景色为黑色,前景色为白色,将掩码位图(图一)与足球位图相"与" SetBkColor(hImageDC, RGB(0,0,0));---------------------------------------------①
SetTextColor(hImageDC, RGB(255,255,255));-------------------------------------②
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);-------③这样,掩码位图中背景色(黑色)的区域在hImageBMP中被保留,前景色(白色)的部分变为黑色。 此时hImageBMP 如下图:
 (图二)
2.1.3 设置背景色为白色,前景色为黑色,将掩码位图(图一)与背景进行“与”运算
SetBkColor(hdcDest,RGB(255,255,255));-----------------------------------------④
SetTextColor(hdcDest,RGB(0,0,0));---------------------------------------------⑤
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);-------⑥掩码中白色区域(数据与1相“与”结果不变)使背景保持不变,黑色区域变成黑色,此时背景显示如下:
 (图三)
2.1.4 将hImageBMP(图二)与背景(图三)进行“或”运算 BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);-----⑦这样就将足球绘制到背景上了。
问题1:如上所说,在到第 2.1.2 步时,hMaskDC 代表的图片为图一(黑色部分为 0 ,白色部分为 1 )
按理说,执行 AND 操作,遇 0 还是 0 ,那么经过 ③ 后,hImageDC 中间的球形
不也应该是黑色( 0 )的吗,周围应当保留蓝色。
为什么实际的图二与我的预计相反呢?
我发现我把 ①② 释掉,结果才与我预计的相同。为什么 ①② 会产生这样的影响,
①② 字面上意思我懂,可它们这样设置,对 ③ 到底是怎样影响的?问题2:hImageDC 是彩色位图,hMaskDC 是单色位图, ③ 语句 是单色 AND 彩色,⑥ 是彩色 AND 单色,这两种情况受
SetBkColor(),SetTextColor()的影响一样吗?本人在这里困了很久了,望好心人帮助,感激不尽(讲得越简单越好^_^)...