SubClassing : utiliser le lParam (sensé ête un pointeur)
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 2012
-
21 oct. 2010 à 00:10
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
21 oct. 2010 à 19:24
Bonjour,
Je souhaiterais refaire moi-même le disign du menu de ma fenêtre (MenuItem)
Le moyen que j'ai trouvé pour ce faire est le subclassing
1) dire au menu que c'est la fenetre qui va redessiner
http://msdn.microsoft.com/en-us/library/ms647578%28v=VS.85%29.aspx cette partie la ca va tres bien, je fait la chose suivante :
'demander que l'affichage des menus se fasse par la procédure de la fenetre
Dim H As Long: H = GetMenu(Me.hWnd)
Dim Hm As Long: Hm = GetSubMenu(H, 0)
Dim MI As MENUITEMINFO
With MI
.fMask = MIIM_BITMAP
.hbmpItem = -1
.cbSize = Len(MI)
End With
Me.Caption = SetMenuItemInfo(Hm, 0, True, MI)
'--------------------------------------------------------------------------
dans ma fenetre j'ai un menu (créé avec l'éditeur de menu) contenant un menu primaire contenant lui-même deux menus
2) gérer les méthodes interceptées par le subclassing
avec la manière classique j'intercepte les évènements. je renvoie sur la procédure par défaut les evenements qui ne m'interessent pas et je souhaite traiter les deux relatifs a l'affichage de mon menu soit :
Private Const WM_MEASUREITEM = &H2C
Private Const WM_DRAWITEM = &H2B
dans mon projet de test, j'arrive bien a intercepter ces deux evenements.
la ou je commence a me tirer les cheveux est sur le parametre lParam de MEASUREITEM
alors on arrive a ma question : comment je fait pour récupérer la structure avec le pointeur (en sachant que dans l'event je dois renseigner des données dans la structure)
je n'arrive pas a comprendre si lParam qui est de type Long contient l'adresse ou si VarPtr(lParam) = adresse de ma structure
merci pour votre aide :)
VB6, quand yen a plus yen a encore
Il y a tant a apprendre et seulement 24 heures dans une journée
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 21 oct. 2010 à 00:54
il semblerait que avec ceci ca marche ... j'ai du mal avec les pointeurs en VB6
'se produit au momment de la création du menu
Private Function MEASUREITEM(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'récupérer ce qu'il y a dans la structure
Dim M As MEASUREITEMSTRUCT
CopyMemory ByVal VarPtr(M), ByVal lParam, LenB(M)
' MEASUREITEM = CallWindowProc(lngOldProc, hWnd, Msg, wParam, lParam)
M.itemWidth = 100
M.itemHeight = 50
'renvoyer la structure
CopyMemory ByVal lParam, ByVal VarPtr(M), LenB(M)
'indiquer que la procédure a été faite avec succes
MEASUREITEM = 1 'must return True
End Function