Ver Mensaje Individual
  #18 (permalink)  
Antiguo 13/07/2008, 11:36
LeandroA
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
Respuesta: Cabecera Listview

hola fijate de este modo

Código:
Option Explicit


Public Type POINTAPI
  x As Long
  y As Long
End Type

Private Type HD_HITTESTINFO
  pt    As POINTAPI
  flags As Long
  iItem As Long
End Type


Private Type TLoHiLong
   Lo As Integer
   Hi As Integer
End Type

Private Type TAllLong
   All As Long
End Type

Private Const HDM_HITTEST As Long = &H1206
Private Const LVM_FIRST = &H1000
Private Const LVM_GETHEADER  As Long = (LVM_FIRST + 31)
Private Const WM_LBUTTONUP As Long = &H202
Private Const WM_RBUTTONUP As Long = &H205
Private Const GWL_WNDPROC = (-4)

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 CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Dim PrevProc As Long


Public Sub HookListView(hwnd As Long)
    Dim HandleHEADER As Long
    HandleHEADER = SendMessage(hwnd, LVM_GETHEADER, 0, 0)
    PrevProc = SetWindowLong(HandleHEADER, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHookListView(hwnd As Long)
    Dim HandleHEADER As Long
    HandleHEADER = SendMessage(hwnd, LVM_GETHEADER, 0, 0)
    SetWindowLong HandleHEADER, GWL_WNDPROC, PrevProc
End Sub


Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)

    Dim hti As HD_HITTESTINFO
    Dim mLH As TLoHiLong, mAL As TAllLong
    
    
     If uMsg = WM_LBUTTONUP Or uMsg = WM_RBUTTONUP Then
    

        mAL.All = lParam
        LSet mLH = mAL
        hti.pt.x = mLH.Lo
        hti.pt.y = mLH.Hi
        
        SendMessage hwnd, HDM_HITTEST, 0&, hti
        
        If hti.iItem > -1 Then
            Select Case uMsg
                Case WM_LBUTTONUP: EnventLeftButtonUp hti.iItem + 1
                Case WM_RBUTTONUP: EnventRightButtonUp hti.iItem + 1
            End Select
        End If
        
    End If
    
End Function


'aca lo que queres
Private Sub EnventLeftButtonUp(ByVal Columna As Long)
Debug.Print Columna
'Form1.PopupMenu Form1.archivo
End Sub

'aca lo que queres
Private Sub EnventRightButtonUp(ByVal Columna As Long)
Debug.Print Columna

End Sub
Saludos