Вызов меню по ПКМ в 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д