Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/07/2008, 12:34
Avatar de David
David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 21 años, 6 meses
Puntos: 839
De acuerdo Respuesta: Cabecera Listview

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
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.