【API Function】


スクリーン座標⇔クライアント座標
 カーソル位置の座標変換には、ScreenToClient,ClientToScreen関数を使用します。
Form_MouseMoveやPicture_MouseMove等における、x,yパラメータは、 クライアント座標の値です。そこでスクリーン座標が必要な場合、この ClientToScreen関数を使用して変換します。(これだったら最初から、 GetCursorPos関数を呼び出したほうがいいですね)
逆にスクリーン座標から クライアント座標に変換するのがScreenToClient関数です。(これも、 特に必要なときは少ないですね)


(ScreenToClient,ClientToScreen 関数の使用方法)

フォームのGeneralセクションに次の宣言コードを追加して下さい。
GetCursorPos関数と一緒に使うことが多いので、 [カーソル位置を取得・設定]のコードに追加(太字)します。

'構造体の定義
Private Type POINT
    x As Long
    y As Long
End Type

'APIの宣言
'マウスカーソルの現在の位置を、スクリーン座標で取得
Private Declare Function GetCursorPos Lib "user32" _
        (lpPoint As POINT) As Long

'hwnd ウィンドウのハンドルを指定、このクライアント座標が変換される
'スクリーン座標で指定された点の座標を、クライアント座標に変換
Private Declare Function ScreenToClient Lib "user32" _
        (ByVal hWnd As Long, lpPoint As POINT) As Long

'クライアント座標で指定された点の座標を、スクリーン座標に変換
Private Declare Function ClientToScreen Lib "user32" _
        (ByVal hwnd As Long, lpPoint As POINT) As Long

フォームにLabelを2つ配置して、Form_MouseMoveプロシージャに次のコード を追加して下さい。

Private Sub Form_MouseMove(Button As Integer, Shift As _
        Integer, x As Single, y As Single)
    Dim p As POINT
    Dim msg As String
    ret = GetCursorPos(p)
    msg = "スクリーン座標 " & "(" & p.x & "," & p.y & ")"
    Label1.Caption = msg
    ret = ScreenToClient(Me.hwnd, p)
    msg = "クライアント座標 " & "(" & p.x & "," & p.y & ")"
    Label2.Caption = msg
End Sub

スクリーン座標を得る以外はパラメータで取得 できるので、それほど重要ではありません。ただ他のAPIで、カーソル の位置をスクリーン座標で指定する場合があるので、必要がないということも ないです。


API Functionインデックス トップ


Copyright(C)1999 Tomoya. All rights reserved.