指定された点の項目のリストインデックスを取得 <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