Newsgroup: it.comp.lang.visual-basic
Titolo: Subclassing,sostituire azione...

Salve a tutti, ho postato qualche giorno fa un problema con il
subclassing che, anche se diversamente dalle aspettative, ho risolto.
In pratica con il subclassing intercetto il click destro del mouse in
un controllo pdf, però ora vorrei che invece di aprirsi il menu tasto
destro si visualizzasse un msgbox o qualcos'altro,
il codice dell'intercettazione (nel modulo) è questo:
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!!!!"
End If
End If
nuovoProcesso = CallWindowProc(processoOriginale, hwnd, iMsg,
wParam, lParam)
End Function
Però in questo moto quando si clicca con il dx sul controllo viene
visualizzato il msgbox e dopo chiuso appare il menu tasto destro;
invece vorrei che il menu non venga aperto.
Da ignorante ho pensato: intercetto il click che però viene ugualmente
processato dalla window procedure originale.
Come posso fare per evitare che il messaggio venga processato dalla
window procedure originale?

 window procedure originale?
Non glielo passi ;-)
Nel codice che hai pubblicato ti ho aggiunto una exit function:
If iMsg = 528 Then 'click del mouse (dx e sx)
	If wParam = 516 Then 'click del dx
		MsgBox "cliccato il destro, non si fa!!!!"
		Exit Function   <---- riga aggiunta
	End If
End If
nuovoProcesso = CallWindowProc(processoOriginale, hwnd, iMsg,
wParam, lParam)
-- 
ciao, hal

Ho cambiato il codice, niente di rilevante, invece di intercettare il
click destro intercetto il click sul pulsante stampa, però al solito
vorrei che si visualizzasse solo il msgbox e non la finestra di dialogo
stampa, anche con exit function non funziona (compare lo stesso la
finestra stampa) e, guarda ora il codice, non funziona neanche così
(anche così si apre la finestra di dialogo stampa)
Public Function nuovoProcesso(ByVal hwnd As Long, ByVal iMsg As Long,
ByVal wParam As Long, ByVal lParam As Long) As Long
If iMsg = 875 Then
MsgBox "stampi????!!!!"
Exit Function
Else
nuovoProcesso = CallWindowProc(processoOriginale, hwnd, iMsg,
wParam, lParam)
End If
end Function
Come mai si apre ugualmente??non capisco!!! nel caso che cliccki su
stampa ho provato a richiamare
nuovoProcesso = CallWindowProc(processoOriginale, hwnd, iMsg, wParam,
lParam)
cambiandp iMsg e wParam ma stesso risultato, si apre ugualmente la
finestra.
Come posso fare??

 ha scritto nel messaggio
If iMsg = 528 Then 'click del mouse (dx e sx)
If wParam = 516 Then 'click del dx
MsgBox "cliccato il destro, non si fa!!!!"
End If
End If
Cos'è 528?
E 516?
Se non la piantate di usare i "magic numbers" al posto delle costanti spero
che vi si bruci l'HD!
Controlla il valore di ritorno della tua windowproc in accordo con quel 528,
che io non so cosa sia.
Ciao

Scusa se uso i numbers ma li uso perchè non so a che costante si
riferiscono, li ho trovati dopo avere fatto stampare a vb su un file
txt tutti i messaggi che generava e studiato mille volte i 100
messaggi, iMsg = 528 è il click del mouse(dx o sx) e wParam = 516 è il
click del pulsante dx.
Come faccio a controllare il valore di ritorno?

 click del pulsante dx.
Ripeto, non so cosa sia il messaggio 528.
A me risulta corrispondere a
Const WM_PARENTNOTIFY = &H210
Che non ho davvero idea di cosa serva, ma credo proprio che non sia quello
che vuoi utilizzare tu.
Controlla l'api viewer per i valori e msdn per il loro nome e significato,
che generalmente inizia con WM_
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

Grazie per la disponibilità, ho letto al riguardo di WM_PARENTNOTIFY:
The WM_PARENTNOTIFY message is sent to the parent of a child window
when the child window is created or destroyed, or when the user clicks
a mouse button while the cursor is over the child window.
Infatti cliccando sul pulsante "Stampa" del controllo pdf si apre la
finestra di dialogo stampa (child window) e il messaggio viene mandato
al form vb (parent window), io vorrei evitare che la finestra di
dialogo si apra quando si clicca su "stampa"