[QUOTE]Originariamente inviato da amadori
codice:
Public Function nuovoProcesso(ByVal hwnd As Long, ByVal iMsg As Long,
ByVal wParam As Long, ByVal lParam As Long) As Long
If iMsg = 528 Then 'click del mouse (dx e sx)
If wParam = 516 Then 'click del dx
MsgBox "cliccato il destro, non si fa!!!!"
wParam=0
End If
End If
nuovoProcesso = CallWindowProc(processoOriginale, hwnd, iMsg,wParam, lParam)
End Function
Ciao, premesso che per risolvere il tuo problema basta mettere quella riga di codice che ho aggiunto in rosso, ti posto un piccolo esempio per fare il subclassing di un oggetto..
da mettere in un modulo:
codice:
Option Explicit
'Serve per cambiare l'indirizzo della funzione dei messaggi:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Serve per richiamare la funzione di gestione messaggi originale
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
'Costante per indicare che vogliamo cambiare la funzione di gestione messaggi
Private Const GWL_WNDPROC = -4
'Click del mouse da intercettare
Private Const WM_LBUTTONUP = &H202
Private Const WM_RBUTTONUP = &H205
'qui salviamo l'indirizzo della procedura originale
Public oldWndProc As Long
'handle dell'oggetto da subclassare
Public gHW As Long
Public Sub HookWin()
oldWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookWin()
Dim temp As Long
If oldWndProc > 0 Then 'è stato subclassato un oggetto...
temp = SetWindowLong(gHW, GWL_WNDPROC, oldWndProc) 'riporto tutto com'era prima del subclass..
End If
End Sub
Private Function WindowProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg
Case WM_LBUTTONUP
MsgBox "Click con il tasto sinistro"
wMsg = 0
Case WM_RBUTTONUP
MsgBox "Click con il tasto destro"
wMsg = 0
End Select
WindowProc = CallWindowProc(oldWndProc, hWnd, wMsg, wParam, lParam)
End Function
da mettere in un form con una textbox:
codice:
Option Explicit
Private Sub Form_Load()
oldWndProc = 0 'indica che non è stato subclassato niente..
gHW = Text1.hWnd
HookWin
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookWin
End Sub
Cliccando nella textbox si vedono gli effetti di questo esempio, magari sono cose che già sapevi, altrimenti spero che possa esserti di aiuto..