He encontrado una forma de interceptar el menú que sale cuando pulsamos con el botón derecho por ej. en un textbox.
El problema es que hay una función que no entiendo lo que hace, ¿me podéis ayudar?
Hay un formulario con un Textbox, un Command y un módulo.
El código es el siguiente:
En el formulario:
Option Explicit
Private mbCapturado As Boolean
Private Sub Command1_Click()
If Not mbCapturado Then
gHW = Text1.hWnd
Activa
mbCapturado = True
Else
mbCapturado = False
Desactiva
gHW = 0
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If mbCapturado Then Desactiva
End Sub
En el módulo esto:
Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public 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
Public Const GWL_WNDPROC = (-4)
Public Const WM_CONTEXTMENU = &H7B
Global lpPrevWndProc As Long
Global gHW As Long
Public Sub Activa()
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
AddressOf gWindowProc)
End Sub
Public Sub Desactiva()
Dim temp As Long
temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub
Public Function gWindowProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_CONTEXTMENU Then
Debug.Print "Interceptado WM_CONTEXTMENU ( " & Now & ")"
gWindowProc = True
Else ' Send all other messages to the default message handler
gWindowProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, _
lParam)
End If
End Function
La función que no entiendo es Function gWindowProc. No sé lo que hace. ¿Es de windows? ¿Es predefinida?
En la primera sentencia if, hace: gWindowProc = True. Viendo esto yo he puesto directamente (dentro de Activa): lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, True), pero se "cuelga" el VB.
Alguien q tenga conocimientos me lo puede explicar un poco??
Muchas gracias.