Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Dec 13, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

ListBoxItemFromPoint - The index of a ListBox item at given coordinates

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
    hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _
    Any, dest As Any, ByVal numBytes As Long)

' Return the index of a ListBox item at given coordinates
' X and Y are in pixels and relative to the ListBox's upperleft corner
' This is similar to the HitTest method of the ListView control
' Here an example that shows the index of the item under the cursor
'   Private Sub List1_MouseMove(Button As Integer, Shift As Integer,
'  '        X As Single, Y As Single)
'      Label1 = ListBoxItemFromPoint(List1, '      ScaleX(X, vbTwips, vbPixels),
'  ScaleY(Y, vbTwips, vbPixels))
'   End Sub

Function ListBoxItemFromPoint(lb As ListBox, ByVal X As Long, _
    ByVal Y As Long) As Long
    Dim lParam As Long

    ' lParam must contain X in its low-order word
    ' and Y in its high-order word.
    ' filling the low-order word is easy
    lParam = X
    ' We need this method to avoid overflow.
    CopyMemory ByVal VarPtr(lParam) + 2, Y, 2

    ListBoxItemFromPoint = SendMessage(lb.hwnd, LB_ITEMFROMPOINT, 0, _
        ByVal lParam)
End Function
Francesco Balena
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date