The new vbAccelerator Site - more VB and .NET Code and Controls

Restrict Mouse Movement to an Area of the Desktop

Author:

Steve McMahon(steve@vbaccelerator.com)

Keywords:

API,Desktop,Mouse

Updated:

01/08/98

Other Tips
All Tips
By Date
By Subject


API (33)
Bit
Manipulation (3)

Clipboard (3)
Combo
Box (5)

Desktop (3)
GDI (13)
Graphics (13)
Internet (2)
Interprocess
Comms (3)

Keyboard (2)
Mouse (1)
Shell (1)
Sprites (1)
Subclassing (3)
Text
Box (2)

Windows (11)
Windows
Controls (10)



Submit


This tip shows you how to ensure a cursor remains within a certain rectangle on the screen. Note that if the user uses Alt-Tab to switch to another application, the clipping cursor is cleared.

Start a new project in VB. Add a new module, and add the following code:

' API Declarations:
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Type RECT
    eft As Long
    op As Long
    ight As Long
    ottom As Long
End Type
Private Declare Sub ClipCursorRect Lib "user32" Alias "ClipCursor" (lpRect As RECT)
Private Declare Sub ClipCursorClear Lib "user32" Alias "ClipCursor" (ByVal lpRect As Long)
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long

Public Sub RestrictCursor( _
        ByVal lLeft As Long, _
        ByVal lTop As Long, _
        ByVal lWidth As Long, _
        ByVal lHeight As Long, _
        Optional ByRef oPositionTo As Object = Nothing _
    )
Dim tR As RECT
Dim tP As POINTAPI
   
   
' Convert positions into a rectangle in pixels:
    tR.Left = lLeft \ Screen.TwipsPerPixelX
    tR.Top = lTop \ Screen.TwipsPerPixelY
    tR.Right = (lLeft + lWidth) \ Screen.TwipsPerPixelX
    tR.Bottom = (lLeft + lHeight) \ Screen.TwipsPerPixelY
   
   
' Validate optional parameter:
    If oPositionTo Is Nothing Then Set oPositionTo = Screen
   
' If positions refer to an form or control, then
    ' convert the coordinates to the screen position:
    If Not oPositionTo Is Screen Then
        tP.X = tR.Left
        tP.Y = tR.Top
        ClientToScreen oPositionTo.hWnd, tP
        tR.Left = tP.X
        tR.Top = tP.Y
        tP.X = tR.Right
        tP.Y = tR.Bottom
        ClientToScreen oPositionTo.hWnd, tP
        tR.Right = tP.X
        tR.Bottom = tP.Y
    End If
   
   
' Set the cursor clipping rectangle:
    ClipCursorRect tR
   
End Sub
Public Sub ClearRestrictCursor()
    ClipCursorClear 0
End Sub

Now you can create a test project. Add a Picture Box to the form in your project, and draw a Check Box inside the Picture Box (note: you must put the check box inside the picture otherwise you won't be able to get at it whilst the cursor is being restricted!).

Add the following code to the Check box click event:

Private Sub Check1_Click()
    If (Check1.Value = Checked) Then
       
' Restrict the cursor so it can't move
        ' out of the picture:
        RestrictCursor 0, 0, Picture1.Width, Picture1.Height, Picture1
    Else
       
' Stop restricting the cursor:
        ClearRestrictCursor
    End If
End Sub

Run the project. You will find that when you click the Check Box you can't move the mouse pointer outside the Picture Box.


 

Related Tips and Articles:

None.

 
 

About  Contribute  Send Feedback  Privacy

Copyright © 1998-1999, Steve McMahon ( steve@vbaccelerator.com). All Rights Reserved.
Last updated: 01/08/98

g="0" cellspacing="0" width="100%">  

About  Contribute  Send Feedback  Privacy

Copyright © 1998-1999, Steve McMahon ( steve@vbaccelerator.com). All Rights Reserved.
Last updated: 01/08/98