マウスイベントの無効と非表示
                                                        玄関へお回り下さい。
マウスのイベントを無効にし、マウスカーソルを非表示に設定  (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