指定された点の項目のリストインデックスを取得          <TOP>


GetCursorPos マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
ClientToScreen 指定されたウィンドウ上の点の座標を、クライアント領域の座標からスクリーン座標に変換
ScreenToClient マウスカーソルの現在の位置に相当するスクリーン座標を取得し、クライアント座標に変換
LBItemFromPt 指定された点にある項目のインデックスを取得
 

 

'================================================================
'= 指定された点の項目のリストインデックスを取得
'=     (LBItemFromPt.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_ClientToScreen& Lib "user32" Alias "ClientToScreen" (ByVal hWnd&, lpPoint As POINTAPI)

' マウスカーソルの現在の位置に相当するスクリーン座標を取得し、クライアント座標に変換
Declare Function Api_ScreenToClient& Lib "user32" Alias "ScreenToClient" (ByVal hWnd&, lpPoint As POINTAPI)

' 指定された点にある項目のインデックスを取得
Declare Function Api_LBItemFromPt& Lib "comctl32" Alias "LBItemFromPt" (ByVal hWnd&, ByVal ptx&, ByVal pty&, ByVal bAutoScroll&)

#define vbRightButton 2                 '右ボタンクリック

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared List1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14

Var Shared fs As Integer

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var i As Integer

    fs = 14

    List1.Attach GetDlgItem("List1")
    List1.SetWindowSize 150, 96
    List1.SetFontSize fs

    For i = 100 To 120
        List1.AddString "Item No." & Trim$(Str$(i))
    Next
End Sub

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

    Ret = Api_GetCursorPos(pa)
    Ret = Api_ScreenToClient(List1.GethWnd, pa)
    Ret = Api_LBItemFromPt(List1.GethWnd, pa.X, pa.Y, 1)
    Text1.SetWindowText Trim$(Str$(pa.X \ (fs / 2))) & ":" & Trim$(Str$(pa.Y \ fs))
End Sub

'================================================================
'=
'================================================================
Declare Sub Edit1_Change edecl ()
Sub Edit1_Change()
    List1.Detach
    Text1.SetWindowText ""

    List1.Attach GetDlgItem("List1")
    List1.SetWindowSize 150, 96
    List1.SetFontSize fs
    fs = Val(Edit1.GetWindowText)
    List1.SetFontSize fs
End Sub

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