マウスの現在地を調べる

マウスの画面上の現在地を取得するテクニックです。

タスクトレイを使用した場合のポップアップメニューを表示する場合に便利です。

サンプル(32bit) ダウンロード

'マウスカーソルの位置取得API&構造体
Private Type POINTAPI
     x As Long
     y As Long
End Type
Private lpPoint As POINTAPI

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    'タスクトレイのマウスのクリックイベント処理
    'PictureBoxのScaleModeプロパティを"3 - ピクセル"にしないと正常に動作しません
    
    Dim hMenu As Long, hSubMenu As Long
    Dim nRC As Long
    Dim vRC
    
    Select Case X
           Case WM_LBUTTONUP
                '左クリックされた場合
                Me.Show
                'タスクトレイのアイコンを削除
                Call NotifyIcon("DELETE")
           Case WM_RBUTTONUP
                '右クリックされた場合
                'Form1のメニューをマウスカーソルがあるところに表示
                menRect.Left = 0
                menRect.Top = 0
                menRect.Right = Screen.Width / Screen.TwipsPerPixelX
                menRect.Bottom = Screen.Height / Screen.TwipsPerPixelY
                nRC = GetCursorPos(lpPoint)
                hMenu = GetMenu(Form1.hwnd)
                hSubMenu = GetSubMenu(hMenu, 0)
                nRC = TrackPopupMenu(hSubMenu, 0, lpPoint.X, lpPoint.Y, 0, Form1.hwnd, menRect)
    End Select

End Sub

サンプル解説

ポップアップメニューを表示する為に、GetCursorPos関数でマウスの画面上の現在地を取得しています。

構造体の内容は次の通りです。

X マウスの画面上のX座標
Y マウスの画面上のY座標

座標情報はピクセルです。


[ Window Close ]