当鼠标指针在屏幕上移动时就会发生 MouseMove 事件。当鼠标指针处在窗体和控件的边框内时,窗体和控件均能识别 MouseMove 事件。
使用图形方法在 MouseMove 过程中的效果与在 MouseDown 过程中的效果截然不同。例如,在本章前面的“MouseDown 事件”主题中,Line 方法绘制连接的直线段,而在下面的 Scribble 应用程序中,在 Form_MouseMove 过程中使用相同方法绘制的是曲线而不是相互连接的线段。
在 Scribble 应用程序中,每当鼠标指针位置变更时都要识别 MouseMove 事件。以下代码在当前位置和先前位置之间绘制一条线。
Private Sub Form_MouseMove (Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
End Sub
与 MouseDown 过程相同,MouseMove 过程创建的直线也从左上角开始,如图 11.2 所示。
图 11.2 MouseMove 事件与 Line 方法创建的简单绘图程序
当指针移过屏幕时要调用多少次 MouseMove 事件?或者换个说法,指针由屏幕顶端移动到底端时将经过多少个位置?
并不是对鼠标经过的每个像素,Visual Basic 都会生成 MouseMove 事件。操作环境每秒生成有限多个鼠标消息。为了看到实际上有多少次识别 MouseMove 事件,可用下述代码增强 Scribble 应用程序,从而在每次识别 MouseMove 事件之处,应用程序都绘制一个小圆圈。运行结果如图 11.3 所示。
Private Sub Form_MouseMove (Button As Integer,_
Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
Circle (X, Y), 50
End Sub
图 11.3 MouseMove 事件发生位置的演示
注意,指针移动的越快,在任何两点之间所能识别的 MouseMove 事件越少。众多圆圈挤在一起表明鼠标在此位置移动缓慢。
应用程序能接二连三迅速识别大量 MouseMove 事件。因此,一个 MouseMove 事件过程不应去做那些需要大量计算时间的工作。
详细信息 请参阅“语言参考”的“MouseMove 事件”。