在 VB 中,如果你试着把一只有鸟的图片放到背景的一棵树上,你就会发现树会被鸟遮住一个矩形的区域(即鸟的图片矩形)。我们可以通过以下方法使图片上非鸟的其它部分变透明: '我们可以利用一个 WinAPI 函数 BitBlt 对图形进行一系列的位操作来达到此目的。 '函数声明: Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long '参数解释: '目标环境:hDestDC__目标设备环境;x__左上角;y__顶端;nWidth__宽;nHeight__高 '源环境:hSrcDC__源设备环境;xSrc__源左上角;ySrc__源顶端; 'dwRop__位处理操作,如 vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert 等 '(目标环境或源环境只能是 Picture, FORM 或 Printer 对象。各单位为象素。) '进行处理之前,我们需要对鸟的图片进行处理:先复制一份相同的图形,将其应该透明之处(鸟的背景)设置为黑色(设此图为sPic),再将另一图做以下处理:要复制的地方(鸟)设置为黑色,其余地方设置(鸟的背景)为白色(设此图为Mask)。 '设树的图形为名dPic? '最后,请加入以下代码: r = BitBlt(dPic.hdc, 0, 0, sPic.Width, sPic.Height, Mask.hdc, 0, 0, vbScrCopy) r = BitBlt(dPic.hdc, 0, 0, sPic.Width, sPic.Height, sPic.hdc, 0, 0, vbScrInvert) '后记: '1、VB 中的 PaintPicture 方法提供类似功能,但速度不及此方法; '2、在此方法上稍微加入一些代码,就不难实现动画的显示。 '3、VB 例子中的 CallDlls 就使用此方法。