カーソル移動範囲を得たり、限定したりするには、 GetClipCursor,ClipCursor関数を使用します。
ClipCursor関数は、カーソルをクライアント領域の外に 移動できないようにしたい時などに使用します。
なお、移動範囲の座標はピクセル単位、 スクリーン座標で取得・指定します。
(GetClipCursor,ClipCursor 関数の使用方法−主な処理)
フォームのGeneralセクションに次の宣言コードを追加して下さい。
ここで、GetClipCursor関数とClipCursor関数の引数が違うことに注意 してください。本当であれば、ClipCursor関数の引数もRECT構造体なの ですが、移動範囲限定を解除するときに、(Byval 0&)を引数に指定しなければ ならないので、やむを得ずClipCursor関数の引数をLong型の配列変数としています。
'構造体の定義 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type 'マウスカーソルの移動可能な範囲を、指定された長方形の内側に制限、 '以後、マウスを動かしたり、SetCursorPos 関数を呼び出したりしても、 'マウスカーソルを長方形の外側に出すことはできなくなる Private Declare Function ClipCursor Lib "user32" _ (lpRect As Long) As Long 'マウスカーソルの移動可能な範囲を、スクリーン座標で取得 Private Declare Function GetClipCursor Lib "user32" _ (lprc As RECT) As Long
詳しくは、サンプルの方をご覧下さい。以下には、主な処理のみ 紹介してあります。
この処理においてカーソルの移動範囲をとんでもない位置に設定すると、 強制終了しなくてはいけなくなるので、なるべく慎重に使用して下さい。
Dim rec As RECT Dim r(3) As Long '疑似RECT構造体 Dim msg As String '疑似RECT構造体に格納 '左上隅の座標 r(0) = 0&: r(1) = 0& '右下隅の座標 r(2) = 800&: r(3) = 600& 'この範囲に限定 ret = ClipCursor(r(0)) 'これを解除するとき ret = ClipCursor(ByVal 0&) '移動可能範囲を取得 ret = GetClipCursor(rec) With rec msg = "移動可能範囲 " & "(" & .Left & "," & .Top & ")-" _ & "(" & .Right & "," & .Bottom & ")" End With