Вызов меню по ПКМ в ListBox - VB
Формулировка задачи:
Хочу сделать всплывающее меню при клике по отдельному итему листбокса. Для этого нужно знать, находится ли курсор в пределах этого итема. Кроме как по координатам, еще как-нибудь это отследить можно?
Решение задачи: «Вызов меню по ПКМ в ListBox»
textual
Листинг программы
- Option Explicit
- Private Type RECT
- iLeft As Long
- iTop As Long
- iRight As Long
- iBottom As Long
- End Type
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal ptx As Long, ByVal pty As Long) As Long
- Private Const LB_ITEMFROMPOINT As Long = &H1A9
- Private Const LB_GETITEMRECT As Long = &H198
- Private Sub Form_Load()
- Dim i As Long
- For i = 0 To 10
- lstTest.AddItem "item " & i
- Next
- End Sub
- Private Sub lstTest_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Dim itm As Long
- Dim rc As RECT
- Dim px As Long, py As Long
- ' Переводим из твипов в пиксели
- px = (X / Screen.TwipsPerPixelX): py = (Y / Screen.TwipsPerPixelY)
- ' Находим ближайший итем
- itm = SendMessage(lstTest.hwnd, LB_ITEMFROMPOINT, 0, ByVal px Or py * &H10000) And &HFFFF&
- ' Находим прямоугольник итема
- SendMessage lstTest.hwnd, LB_GETITEMRECT, itm, rc
- If PtInRect(rc, px, py) Then
- Caption = itm
- Else
- Caption = -1
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д