Newsgroup: it.comp.lang.visual-basic
Titolo: [!] MultiSubClassing

Saluti a tutto il NewsGroup, volevo farvi sapere che sono riuscito a
effettuare multipli SubClassing:
- una stessa form con due NewWindowProc
- piů di una form che hanno la stessa NewWindowProc
Buonanotte (o Buongiorno, dipende  ;)   )
Faber
P.S.: non so se č una cosa degna di nota o sto intasando il NiusGrup, ma io
non l'avevo mai fatto  8)

 - piů di una form che hanno la stessa NewWindowProc
Questo invece č piů che normale.
Saluti,
Domenico

non l'avevo mai fatto  8)
Molte volte, anziché usare due WindProc per una stessa form, è anche possibile operare una selcet
dei messaggi da intercettare... comunque bisogna vedere se e quando conviene (visto che con il
subclassing molto spesso si hanno dei problemi è meglio cercare la via più semplice....); comunque
funziona...
Ciao,
Moreno
#sirri#@
morenosoft.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

> Potrei vederne un esempio, per favore?
avevo un progetto che effettuava il subclassing di una form in un modulo
bas, e dopo la chiamata a
SubClass hWnd    'Nel Form_Load
ho chiamato il metodo di un ocx che effettua il subclassing di una form
Titler.Initialize Me
poi nell'Unload ho messo
UnSubClass hWnd
e non Titler.DeInitialize Me
(che fa la stessa cosa...)
effettivamente veniva eseguito sia il codice della WProc dell'ocx sia quella
nel modulo bas
ecco le funzioni del bas:
Public Sub SubClass(hwnd As Long)
    defWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnSubClass(hwnd As Long)
    If defWindowProc Then
        SetWindowLong hwnd, GWL_WNDPROC, defWindowProc
        defWindowProc = 0
    End If
End Sub
Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case hwnd
        Case MainForm.hwnd
            Select Case uMsg
                Case WM_GETMINMAXINFO
                    Dim MMI As MINMAXINFO
                    CopyMemory MMI, ByVal lParam, LenB(MMI)
                    With MMI
                        .ptMinTrackSize.x = minX
                        .ptMinTrackSize.y = minY
                        .ptMaxTrackSize.x = maxX
                        .ptMaxTrackSize.y = maxY
                    End With
                    CopyMemory ByVal lParam, MMI, LenB(MMI)
                    WindowProc = 0
                Case Else
                    WindowProc = CallWindowProc(defWindowProc, hwnd, uMsg,
wParam, lParam)
        End Select
    End Select
End Function
Faber

E' nell'essenza stessa del subclassing - come di qualsiasi hook - poterlo
fare, comunque mi fa piacere vedere programmatori felici di questi tempi!
(Una questione di lana caprina: in genere sarebbe meglio far gestire tutto
ad un'unica routine, ma costa veramente poco di più usarne più di una quando
poi il collo di bottiglia è il codice di VB.)
----------------------------------------------------------------------
Stefano Minardi
Zetesis: 
zet...@mclink.it
----------------------------------------------------------------------

chiamarne altre in cascata.
concordo. l'effetto è cmq quello di averne due che gestiscono la stessa form
Ciao
Faber