DrawMode 的显示控制作用

DrawMode 属性决定,当把一个样式画在另一个之上时,能够取得什么结果。尽管改变 DrawMode 属性,经常会带来一些影响(尤其是彩色系统),但是当在一个空白或是纯白色的背景上,或者是在未定义颜色的背景上绘制时,是没有必要使用该属性的。

可以将 DrawMode 设置为从 1 到 16 的值。下表中是常用的设置值。

设置值 描述
4 Not Copy 笔。画出相反的直线样式,不管该处原来的存在如何。
7 Xor 笔。显示出直线样式和现存显示的区别,参阅本节后面的解释。用这种模式绘制对象两次,将精确地恢复该处原来的背景。
11 无操作,效果相当于关掉了绘画。
13 Copy 笔(缺省值)。使用直线的样式,不管该处原来的存在如何。

详细信息 请参阅《语言参考》的“DrawMode 属性”。

Xor 笔

对于动画来说,7 是 DrawMode 的一个有用的设置值。一条线画出两次,就可精确还原该线画出之前地有的显示内容。这样就可能创建一个在背景上移动却不会使其毁坏的对象,因为在移动时,可以还原背景。大多数模式不能保护原来的背景。

例如,下列代码的作用是:每单击一下鼠标就移动一个圆,无论圆底下有什么,它都能被还原。

Private Sub Form_Click ()
   ForeColor = 255 : DrawMode = 7
   Circle (CurrentX, CurrentY), 1000
   CurrentX = CurrentX + 220
   CurrentY = CurrentY + 220
   Circle (CurrentX, CurrentY), 1000
End Sub

Xor 笔的绘图模式(以及大多数其它的 DrawMode 设置值),是通过将绘图样式(被称作“笔”)中的各个像素与存在区(被称作“目标”)中的相应像素进行比较的方式工作的。在单色系统中,像素不是被打开就是被关闭,Visual Basic 进行一种简单的逻辑比较:如果笔和目标中有一个打开,而不是两个同时都打开时,则使像素打开。

在彩色系统中,每一个像素都赋给一个色值。对于 DrawMode 的 Xor 笔这样的设置值来说,Visual Basic 将对笔和目标里相应的每一对像素进行比较,执行二进制(位方式)的比较操作。结果决定生成像素的色值,如图 12.21 中所示。

图 12.21 使用 Xor 笔给直线像素设置二进制值