汽车上路有速度,鼠标移动是不是也讲速度呢?
  看看小生做的鼠标测速仪吧。
  程序本身不难,主要是想借此给大家讲讲透明图片的实现。
  假如有这么一张图片(左图),你想将它做成透明图片(右图):

  首先,将原图中不需要透明的部位染黑,透明的部位染白,另存为新文件,这个图形称为掩码图:

  接着,把原图中需要透明的部位染黑:

  准备工作就做完了。接下来,我们将染黑后的图和掩码图导入资源文件,在程序中按标准方法将图片装入内存,接下来,使用AND运算将掩码图绘制到绘图表面上,就是BitBlt(xx, xx, ..., SRCAND)。稍懂点AND运算的朋友就会知道,颜色 AND 白色=原来的颜色,颜色 AND 黑色=黑色。于是,我们就得到了一个这样的图形:

  接下来,我们将染黑后的图形用OR运算绘制到同一位置:BitBlt(xx, xx, ..., SRCPAINT)。这样,图像透明的部分进行这样的运算:背景颜色 OR 黑色=原来的颜色;不透明的部分:黑色 OR 图案颜色=原来的颜色。于是,透明的图案就绘制成功了。

  这可是我冥思苦想了很久才想出来的哟。当我完工后,忽然看到一篇文章,也是教做透明图片的,不过它的最后一步用的是BitBlt(xx, xx, ..., SRCINVERT),也就是XOR运算。效果和我一模一样,于是我就骂:“玩什么格呀?无聊!”有兴趣的朋友下去自己试试XOR吧,我不奉陪了。
  当你严格按照我介绍的掩码制法做出图形后,OR和XOR都能的出正确的结果。不过,如果你的掩码不正确,那么OR和XOR都不能得到正确结果(这不废话吗?),两者的结果还不同呢!