* VB-CODE (2)
Tip 170: Positioning the Mouse Pointer over a Specific Control
December 5, 1995
Abstract
This article explains how to position the mouse pointer over a specific
control in a Microsoft? Visual Basic? application.
Positioning the Mouse Pointer
Sometimes you may need to position the mouse pointer over a specific
control in a Microsoft? Visual Basic? application, even though that
control does not have the current focus.
To position the mouse pointer over a specific control, you need to use the
Microsoft Windows? application programming interface (API) GetWindowRect
and SetCursorPos functions. The GetWindowRect function is used to retrieve
the coordinates of a control. The Declare statement for the GetWindowRect
function is:
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect
As RECT) As Long
The GetWindowRect function requires two arguments. The first argument is
the handle of the control. The second argument is the address of a RECT
structure.
After calling the GetWindowRect function, the control's coordinates are
stored in the RECT structure. The RECT structure is defined as:
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Note that the left, top, right, and bottom positions of the control are
stored in the RECT structure. After you know the exact position of the
control, you need to use the SetCursorPos function to position the mouse
pointer directly over the control. The Declare statement for the
SetCursorPos function is:
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long,
ByVal y As Long) As Long
Then, to position the mouse pointer over the control, you retrieve the
coordinates of the control's upper-left corner by using the values stored
in the Left field and Top field of the RECT structure. Next, you call the
SetCursorPos function with these two values to actually position the mouse
pointer over the control.
Example Program
This program shows how to move the mouse pointer over a specific control.
1. Create a new project in Visual Basic. Form1 is created by default.
2. Add the following Declare statements to the General Declarations
section of Form1 (note that each Declare statement must be typed
as a single line of code):
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect
As RECT) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As
Long) As Long
3. Add the following code to the Form_Load event for Form1:
Private Sub Form_Load()
Dim MousePos As RECT
Call GetWindowRect(Command2.hwnd, MousePos)
Call SetCursorPos(MousePos.Left, MousePos.Top)
End Sub
4. Add a Command Button control to Form1. Command1 is created by default.
Set its Default property to False.
5. Add a second Command Button control to Form1. Command2 is created by
default. Set its Default property to True.
6. From the Visual Basic Insert menu, select Module to create a new
module. Module1.Bas is created by default.
7. Add the following Type structure to Module1.Bas:
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Run the example program by pressing F5. Notice that the focus is set to
the first Command Button control, but the mouse pointer is positioned over
the second Command Button control. In short, the mouse pointer is placed
over the control whose Default property is set to True.
Return