由于 Microsoft Windows 的图形特性,图形和其它操作的显示速度在很大程度上决定了应用程序的感觉速度。窗体出现及画图的速度越快,应用程序就会显得越快。
以下的几种技术可用来提高应用程序的显示速度:
1. 将容器的 ClipControls 属性设置为 False
除非正在使用图形方法(Line,Pset,Circle 和 Print),否则将窗体、框架及 PictureBox 控件的 ClipControls 设置为 False(如果代码包含了在其它控件之后绘图的图形方法,则这可能导致不可预测的结果)。当 ClipControls 设置为 False 时,在重画控件本身之前,Visual Basic 不会用背景覆盖控件。这在窗体包含大量控件时,会大大提高显示速度。
详细信息 请参阅“使用文本和图形”中的“使用 AutoRedraw 和 ClipControls 使图形分层”。
2. 恰当地使用 AutoRedraw
当窗体或控件的 AutoRedraw 设置为 True 时,Visual Basic 会利用位图重画该窗体或控件。这种方法虽然提高了简单情况的重画速度(例如,在删除覆盖在窗体或控件上的窗口后,窗体或控件重新显示),但会降低图形方法的速度。此时,Visual Basic 就会在 AutoRedraw 位图上进行图形方法操作,再把整个位图复制到屏幕上。这个过程也占用了相当数量的内存。
如果应用程序产生的图形复杂但是不常改变,AutoRedraw 设置为 True 较为合适。如果图形需要经常改变,则 AutoRedraw 设置为 False 的效果更好,并且在 Paint 事件中进行窗体或控件的图形方法操作。
详细信息 请参阅“使用文本和图形”中的“使用 AutoRedraw 和 ClipControls 使图形分层”。
3. 用 Image 控件替代 PictureBox 控件
优化能够提高应用程序的速度,并减小其大小,所以要尽量应用优化技术。如果仅简单显示图片,并只对单击事件和鼠标操作作出响应,应使用 Image 控件替代 PictureBox。除非需要图片框提供的特殊功能时,如图形方法、包含其它控件的能力或动态数据交换 (DDE),否则不要使用图片框。
4. 设置属性时隐藏控件以避免多次重画
重画的代价是昂贵的。重画的操作越少,应用程序就显得越快。减少重画次数的一种方法,就是操作控件时使其不可见。例如,假设在窗体的 Resize 事件中调整数个列表框的大小:
Sub Form_Resize ()
Dim i As Integer, sHeight As Integer
sHeight = ScaleHeight / 4
For i = 0 To 3
lstDisplay(i).Move 0, i * sHeight, _
ScaleWidth, sHeight
Next
End Sub
该示例产生四次独立的重画,每个列表框一次。把所有的列表框放在图片框中,并在移动或调整列表框大小之前隐藏图片框,就会减少重画的次数。当再次使图片框可见时,所有的列表框一次画出:
Sub Form_Resize ()
Dim i As Integer, sHeight As Integer
picContainer.Visible = False
picContainer.Move 0, 0, ScaleWidth, ScaleHeight
sHeight = ScaleHeight / 4
For i = 0 To 3
lstDisplay(i).Move 0, i * sHeight, _
ScaleWidth, sHeight
Next
picContainer.Visible = True
End Sub
值得注意的是,该示例中使用了 Move 方法替代设置 Top 和 Left 属性。Move 方法只需一次操作就设置了这两个属性,所以节省了多余的重画。
5. 使用 Line 替代 PSet
使用 Line 比使用一系列的 PSet 方法快。避免使用 Pset 方法,把一些点组成一条线由 Line 方法一次画出。一般来说,简单、不常改变的图形元素采用形状和直线控件来处理比较合适;而复杂的或经常改变的图形则最好采用图形方法处理。