Antes que nada. Bienvenido al foro,
parboli.
Gracias a este código descubrí que podemos interceptar los mensajes del sistema enviados a una ventana:
http://www.recursosvisualbasic.com.a...de-ventana.htm
Así que en este caso lo único que necesitamos es adaptarlo al encabezado del ListView para que recibamos el mensaje de click con el botón derecho.
Coloca este código en un módulo:
Código PHP:
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Const GWL_WNDPROC = (-4)
Private Const WM_RBUTTONDOWN = &H204
Private TrueWindowProc As Long
Private TimerEvent As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Long) As Long
If msg = WM_RBUTTONDOWN Then
TimerEvent = SetTimer(0, 0, 0, AddressOf RClickEvent)
End If
WindowProc = CallWindowProc(TrueWindowProc, hwnd, msg, wParam, lParam)
End Function
Public Sub ChangeWindowProc(ByVal hwnd As Long)
TrueWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub RClickEvent()
KillTimer 0, TimerEvent
'Aquí debes programar lo que quieres que se realice al hacer click con el botón derecho'
'Por ejemplo en este caso mostramos un menú contextual del Form1 con el nombre MainMenu'
Form1.PopupMenu Form1.MainMenu
End Sub
En tu ventana coloca este código:
Código PHP:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Sub Form_Load()
Dim lhWnd As Long
'Obtenemos el hwnd del encabezado del ListView'
lhWnd = FindWindowEx(ListView1.hwnd, 0, "SysHeader32", vbNullString)
'Cambiamos el procedimiento para interceptar los mensajes'
ChangeWindowProc lhWnd
End Sub
Espero que te sirva. Saludos