スクリーン座標からクライアント座標に変換          <TOP>


マウスカーソルの現在の位置に相当するスクリーン座標を取得し、クライアント座標に変換します。

GetCursorPos スクリーン座標を取得

ScreenToClient 点座標をスクリーン座標からクライアント座標に変換

 

フォームをクリックし、そのスクリーン座標をクライアント座標に変換してその位置を表示、さらにクリックした位置を赤点で示しています。

 

'================================================================
'= スクリーン座標からクライアント座標に変換
'=    (ScreenToClient.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    X As Long
    Y As Long
End Type

' マウスカーソルの現在の位置に相当するスクリーン座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

' 点座標をスクリーン座標からクライアント座標に変換
Declare Function Api_ScreenToClient& Lib "user32" Alias "ScreenToClient" (ByVal hWnd&, lpPoint As POINTAPI)

Var Shared Text1 As Object
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14

#define vbCrLf Chr$(13,10)

'================================================================
'=
'================================================================
Declare Sub Mainform_Click edecl ()
Sub Mainform_Click()
    Var pa As POINTAPI
    Var Ret As Long

    Ret = Api_GetCursorPos(pa)
    Ret = Api_ScreenToClient(GethWnd, pa)

    Text1.SetWindowText "X = : " & Str$(pa.X) & vbCrLf & "Y = : " & Str$(pa.Y)
    SetDrawWidth 3 '目視し易いよう(老眼対策・・・)
    Pset(posi.X, posi.Y), 5 
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End