マウスイベントの無効と非表示 |
マウスのイベントを無効にし、マウスカーソルを非表示に設定 (104) | |
よく、非表示にした、だけで使用されているのを見かけますが、非表示にしてもクリックイベントは発生し、見えないだけで、通常通り使用できます。 そこで、マウスの移動範囲制限用APIを使い、マウスカーソルを1点に固定する事で、マウスのイベントを無効にしています。 取り扱い方次第でマウスイベントが無効のままに、なりますので注意して下さい。 Option Explicit 'SampleNo=104 WindowsXP VB6.0(SP5) 2002.05.19 'マウスカーソルの移動範囲を制限する(P384) Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long 'クライアント座標からスクリーン座標に交換する(P514) Private Declare Function ClientToScreen Lib "user32" _ (ByVal hwnd As Long, lpPoint As POINTAPI) As Long 'マウスカーソの移動範囲取得する(P386) Private Declare Function GetClipCursor Lib "user32" (lprc As RECT) As Long 'カーソルを表示・非表示にする(P390) '0以上の時表示 0未満の時非表示 Private Declare Function ShowCursor Lib "user32" _ (ByVal bShow As Long) As Long '座標の構造体 Private Type POINTAPI X As Long y As Long End Type '移動範囲の構造体 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private LookOff As RECT '構造体用変数 Private Sub Form_Load() '初期値の取得 GetClipCursor LookOff End Sub Private Sub Command1_Click() 'マウスカーソルの移動範囲を制限し、非表示に Dim MoLook As RECT Dim LookPo As POINTAPI ClientToScreen Me.hwnd, LookPo '移動範囲を設定(何も貼り付けていない所) MoLook.Left = LookPo.X + 10 MoLook.Top = LookPo.y + 10 MoLook.Right = LookPo.X + 10 MoLook.Bottom = LookPo.y + 10 'マウスカーソルを非表示 sMouseVisible False 'マウスカーソルをロック ClipCursor MoLook End Sub Private Sub Command2_Click() 'マウスカーソルの移動範囲を解除し、表示する 'マウスカーソルのロック解除 ClipCursor LookOff 'マウスカーソルを表示 sMouseVisible True End Sub Private Sub Form_Unload(Cancel As Integer) '念のため終了時に初期値に戻す。 ClipCursor LookOff sMouseVisible True Unload Me End Sub Private Sub sMouseVisible(ByVal MoOnOff As Boolean) 'マウスカーソル表示・非表示用プロシージャ 'マウスの表示・非表示の設定 Dim flglook As Boolean Dim ret As Long flglook = MoOnOff ret = ShowCursor(flglook) 'カウント過剰UPの防止 Do While ret <> flglook If ret < -1 Then flglook = True ElseIf ret > 0 Then flglook = False End If ret = ShowCursor(flglook) Loop End Sub |
|
マウスカーソルの表示カウントは−1か0より変化しない状態で使って下さい マウスロックの状態で終了するとマウスが使えなくなりますので十分注意して下さい ご使用の場合エラー処理を実施して下さい。 |
2002/05/20