如标题所示

解决方案 »

  1.   

    设定Mouse  在某个固定范围  
    Type  RECT  
                   Left  As  Long  
                   Top  As  Long  
                   Right  As  Long  
                   Bottom  As  Long  
    End  Type  
     
    Declare  Function  ClipCursor  Lib  "user32"  (lpRect  As  Any)  As  Long  
    Declare  Function  ShowCursor  Lib  "user32"  (ByVal  bShow  As  Long)  As  Long  
    Declare  Function  SetCursorPos  Lib  "user32"  (ByVal  x  As  Long,  _  
                   ByVal  y  As  Long)  As  Long  
    Declare  Function  GetWindowRect  Lib  "user32"  Alias  "GetWindowRect"  _  
                   (ByVal  hwnd  As  Long,  lpRect  As  RECT)  As  Long  
     
    '设定Mouse可移动的围是在某个control项之内  
    Public  Function  toLockCursor(ByVal  ctlHwnd  As  Long)  As  Boolean  
    Dim  rect5  As  RECT  
    Dim  res  As  Long  
    GetWindowRect  ctlHwnd,  rect5  '取得window的四个角  
    rect5.Top  =  rect5.Top  
    rect5.Left  =  rect5.Left  
    rect5.Bottom  =  rect5.Bottom  
    rect5.Right  =  rect5.Right  
    SetCursorPos  (rect5.Top  +  rect5.Bottom)  \  2,  (rect5.Left  +  rect5.Right)  \  2  
     
    res  =  ClipCursor(rect5)  
    If  res  =  1  Then  
         toLockCursor  =  True  
    Else  
         toLockCursor  =  False  
    End  If  
    End  Function  
     
    '设定Mouse移动的围为个萤幕  
    Public  Sub  toUnLockCursor()  
    Dim  rscreen  As  RECT  
    rscreen.Top  =  0  
    rscreen.Left  =  0  
    rscreen.Right  =  Screen.Width  \  Screen.TwipsPerPixelX  
    rscreen.Bottom  =  Screen.Height  \  Screen.TwipsPerPixelY  
    ClipCursor  rscreen  
    End  Sub  
     
    例如:设定Mouse只能在Form的范围  
    Private  Sub  Command1.Click()  
     Call  toLockCursor(Me.hWnd)  
    End  Sub  
    Private  Sub  Command2.Click()  
     Call  toUnLockCursor()  
    End  Sub  
      

  2.   

    在模块中Option Explicit
    '
    ' Win32 API Declarations, Type Definitions,
    ' and Constants
    '
    Private Type RECT
       left As Long
       top As Long
       right As Long
       bottom As Long
    End TypePrivate Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As LongPrivate Const SM_CYCAPTION = 4
    Private Const SM_CXFRAME = 32
    Private Const SM_CYFRAME = 33Public Sub Release()
       '
       ' Clear clipping by passing NULL pointer
       '
       Call ClipCursor(ByVal vbNullString)
    End SubPublic Sub RestrictToControl(cntl As Control)
       Dim r As RECT
       '
       ' This routine only accepts controls which
       ' support the hWnd property.
       ' Handle errors by ignoring them.
       '
       On Error Resume Next
       Call GetWindowRect((cntl.hwnd), r)
       If Err.Number = 0 Then
          Call Cursor.RestrictToRect(r)
       End If
    End SubPublic Sub CenterOnControl(cntl As Control)
       Dim r As RECT
       '
       ' This routine only accepts controls which
       ' support the hWnd property.
       ' Handle errors by ignoring them.
       '
       On Error Resume Next
       Call GetWindowRect((cntl.hwnd), r)
       If Err.Number = 0 Then
          Cursor.CenterOnRect r
       End If
    End SubPublic Sub RestrictToForm(frm As Form)
       Dim r As RECT
       '
       ' Clip just to client area of form, to
       ' prevent resizing or closing.
       '
       Call GetClientScrnRect(frm, r)
       Call Cursor.RestrictToRect(r)
    End SubPublic Sub CenterOnForm(frm As Form)
       Dim r As RECT
       '
       ' Center to client area.
       '
       Call GetClientScrnRect(frm, r)
       Call Cursor.CenterOnRect(r)
    End SubPrivate Sub RestrictToRect(lpRect As RECT)
       '
       ' Use API to restrict cursor to a rectangle.
       '
       Call ClipCursor(lpRect)
    End SubPrivate Sub CenterOnRect(lpRect As RECT)
       '
       ' Use API to place cursor at center of rectangle.
       '
       Call SetCursorPos(lpRect.left + (lpRect.right - lpRect.left) \ 2, _
                         lpRect.top + (lpRect.bottom - lpRect.top) \ 2)
    End SubPrivate Sub GetClientScrnRect(frm As Form, rC As RECT)
       Dim x As Integer
       Dim y As Integer
       '
       ' Retrieve position info from API.
       ' Assume worst-case: sizable border.
       '
       Call GetWindowRect((frm.hwnd), rC)
       x = GetSystemMetrics(SM_CXFRAME)
       y = GetSystemMetrics(SM_CYFRAME)
       '
       ' Calculate screen coordinates of client area.
       '
       rC.left = rC.left + x
       rC.right = rC.right - x
       rC.top = rC.top + y + GetSystemMetrics(SM_CYCAPTION)
       rC.bottom = rC.bottom - y
    End Sub在窗口中:Cursor.RestrictToControl Picture1
       Cursor.CenterOnControl Picture1