Newsgroup: it.comp.lang.visual-basic
Titolo: Subclassing

Salve.
Ho un problema questa volta con il Subclassing.
Sono riuscito ad inserire una icona nella tray ed a questo punto, tanto per
imparare, volevo anche imparare come gestire eventi applicati su questa.
Quindi sono andato sul sito comune di cui mi è stato dato l'indirizzo dove
ho trovato un sorgente ed anche un bel manuale.
Da qui ho trovato tutto ciò che devo scrivere trovando questo:
 Public Const WM_MOVING = &H216
 Public Const GWL_WNDPROC = (-4)
 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
   (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
  Public lProcOld As Long
 Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = WM_MOVING Then
        frmSubclass.lblPosition.Caption = frmSubclass.Left /
Screen.TwipsPerPixelX & _
  ";" & frmSubclass.Top / Screen.TwipsPerPixelY
    End If
    WindowProc = CallWindowProc(lProcOld, hWnd, uMsg, wParam, lParam)
End Function
Però il mio VB6 mi dà errori vari:
Public Const WM_MOVING = &H216
Public Const GWL_WNDPROC = (-4)
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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
   (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Dice che non sono ammessi come Public.
Che faccio?
Poi volevo chiedervi anche se ho capito bene:
If uMsg = WM_MOVING Then
        frmSubclass.lblPosition.Caption = frmSubclass.Left /
Screen.TwipsPerPixelX & _
  ";" & frmSubclass.Top / Screen.TwipsPerPixelY
    End If
Con questo si dice cosa deve fare il programma al movimento del mouse?
Ma cosa vuol dire la roba dopo il then e prima del End If? Sul manuale c'è
scritto ma non ha capito. Se volessi che il form diventi visibile basterebbe
scrivere:
.... then
form1.visible=true
End iF
?
Oppure no?
Grazie per qualsiasi risposta e scusate la lunghezza del messaggio.
--
Ramses
http://evilzone.tsx.org
ram...@freemail.it
ICQ:39860665
"La prima volta che ho preso l'alcole ho visto Dio"
by Claudio Zanon

Oppure no?
Quello che c'è scritto è semplicemente l'aggiornamento di una label ad ogni
messaggio WM_MOVING, che non mi sembra sia quello che cerchi tu.
Non ho visto l'esempio di cui parli ma mi sembra di capire che agisca sul
messaggio arrivato via subclassing:
WM_MOVING = La finestra associata all'icona (che immagino sia identificata
dall'hWnd passata alla struttura per l'aggiunta nella try) sta venendo
spostata.
tu dovresti controllare WM_NCRBUTTONDOWN (MouseDown del tasto destro) o
WM_NCLBUTTONDOWN (MouseDown del tasto sinistro)
Se hai l'MSDN (dovresti averlo :) ) cerca WM_NCRBUTTONDOWN e tutti i WM_*,
sono molto interessanti.
Ciao

Oppure no?
No, quello significa:
SE il messaggio che ho intercettato è WM_MOVING (ovvero se sto spostando la finestra subclassata,
quindi in questo caso la form) ALLORA scrivi sull'etichetta lblPosition la posizione della form
sullo schermo nel seguente formato: X:Y dove X è la distanza dal bordo destro e Y quella dal bordo
alto. Dal momento che le misure dei controlli in VB sono dati in Twips, Screen.TwipsPerPixel indica
il rapporto tra Twips e Pixel, sia in lunghezza che in altezza; in questo modo le misure riportate
sono in pixel.
Spero di essere stato abbastanza chiaro.