マウスカーソルの移動領域を取得          <TOP>


マウスカーソルの移動領域取得と制限をします。

GetClipCursor マウスカーソルの移動領域を取得

GetWindowRect ウィンドウの座標をスクリーン座標系で取得

ClipCursor マウスの移動範囲を制限

GetDesktopWindow Windowsのデスクトップ ウィンドウを識別

 

左:デスクトップの移動領域取得    右:ウインドウ(フォーム)の移動領域取得/ClipCursorでマウス移動はフォーム内に制限しています。

 

 

'================================================================
'= マウスカーソルの移動領域を取得
'=    (GetClipCursor.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

' マウスカーソルの移動領域を取得
Declare Function Api_GetClipCursor& Lib "user32" Alias "GetClipCursor" (lpRect As RECT)

' ウィンドウの座標をスクリーン座標系で取得
Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT)

' マウスの移動範囲を制限
Declare Function Api_ClipCursor& Lib "user32" Alias "ClipCursor" (lpRect As RECT)

' Windowsのデスクトップ ウィンドウを識別。返されるポインタは、一時的なポインタ。後で使用するために保存しておくことはできない
Declare Function Api_GetDesktopWindow& Lib "user32" Alias "GetDesktopWindow" ()

Var Shared Text1 As Object
Var Shared Text2 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Text2.Attach GetDlgItem("Text2") : Text2.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub ShowCurrentRect()
Sub ShowCurrentRect()
    Var rct As RECT
    Var Ret As Long

    Ret = Api_GetClipCursor(rct)
    Text1.SetWindowText Format$(rct.Left ,"Left :####") & Chr$(13) & Format$(rct.Top ,"Top :####")
    Text2.SetWindowText Format$(rct.Right,"Right :####") & Chr$(13) & Format$(rct.Bottom,"Bottom:####")
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var Ret As Long

    ShowCurrentRect

    Line(80, 34) - (160, 70), , , b
    SetDrawWidth 5
    Pset(80, 34), 5
    Pset(160, 70), 5
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var rct As RECT
    Var Ret As Long

    Ret = Api_GetWindowRect(Api_GetDesktopWindow(), rct)
    Ret = Api_ClipCursor(rct)
    ShowCurrentRect
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var rct As RECT
    Var Ret As Long

    Ret = Api_GetWindowRect(GethWnd, rct)
    Ret = Api_ClipCursor(rct)
    ShowCurrentRect
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End