要把鼠标指针限制在屏幕的特定区域里,你就要使用API的函数ClipCursor。下面就是声明:
Declare Function ClipCursor Lib "user32" _
(lpRect As Any) As Long
这个函数的一个自变量是RECT结构,它定义了限制区域,这个区域用屏幕象素来表示。下面的示例代码显示了如何将VB的twip转换成像素。RECT结构,或者是VB里的UDT,如下所示:
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
要取消限制,你可以再次调用ClipCursor,用它传递包含有整个屏幕坐标的结构。但是,使用ClipCursorByNum函数会更容易一些,因为这个函数就是专门用来取消限制的:
Declare Function ClipCursorByNum Lib "user32"
Alias _
"ClipCursor" (ByVal lpRect As Long) As Long
要注意,这个函数是ClipCursor的别名,它接受一个类型为Long的自变量。要确保传递了零这个值,以取消限制。
下面两个Click(点击)事件过程能够和窗体里的按钮关联起来,以说明下面的技巧:
Private Sub cmdClip_Click()
Dim ClipArea As RECT
With ClipArea
.Left = Me.Left / Screen.TwipsPerPixelX
.Top = Me.Top / Screen.TwipsPerPixelY
.Right = .Left + Me.Width / Screen.TwipsPerPixelX
.Bottom = .Top + Me.Height / Screen.TwipsPerPixelY
End With
Call ClipCursor(ClipArea)
End Sub
Private Sub cmdRelease_Click()
Call ClipCursorByNum(0)
End Sub
有很多动作都能够取消限制,例如调整VB窗体的大小或者移动窗体,例如激活另一个程序(比如使用[Alt][Tab])或者([Ctrl][Alt][Delete])。你的程序可以通过在窗体移动,或者在改变大小的时候重新进行限制来处理窗体动作。限制会一直持续到程序结束,所以程序总是会在它终止之前取消限制。
夹住鼠标指针不是一个限制应用程序的鼠标输入的简单方法,但是在有些情况下,尤其当用户不是计算机高手时,它就能够起作用。
Peter Aitken自Visual Basic 1.0版上市开始就在用它编程。他已经编写了很多关于Visual Basic以及其他计算机和编程方面的书和杂志文章。