Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~

Fonction GetSubMenu

Declare Function GetSubMenu Lib "user32" ( _
                 
ByVal hMenu As Long, _
                 ByVal nPos As Long) As Long
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui

Description :
Cette fonction permet de récupérer un handle sur un sous-menu.
hMenu est le handle du menu auquel appartient le sous-menu dont on a besoin.
nPos est la position du sous-menu que l'on veut récupérer (on démarre à 0).
Si la fonction réussie, elle retourne un handle sur le sous-menu, sinon 0.

Exemple d'utilisation :

' Exemple de :
' Luc Chiodelli - webmaster@asp-le-refuge.net

Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function
GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" ( _
                       
ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, _
                        lpmii
As MENUITEMINFO) As Long

Public Declare Function
GetSubMenu Lib "user32" (ByVal hMenu As Long, _
                                           
ByVal nPos As Long) As Long

Public Declare Function
GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long

Public Type
MENUITEMINFO
    cbSize
As Long
   
fMask As Long
   
fType As Long
   
fState As Long
   
wID As Long
   
hSubMenu As Long
   
hbmpChecked As Long
   
hbmpUnchecked As Long
   
dwItemData As Long
   
dwTypeData As String
   
cch As Long
End Type

Public Const
MIIM_STATE = &H1
Public Const MIIM_ID = &H2
Public Const MIIM_TYPE = &H10
Public Const MIIM_SUBMENU = &H4
Public Const MFS_DEFAULT = &H1000
Public Const MF_STRING = &H0&

Public Function AfficheItemsMenu(frmTmp As Form, lstTmp As ListBox) As Boolean
' Parcours les menus de la fenêtre donnée en paramètre et les affiche
' dans le contrôle ListBox passé en paramètre.
Dim hMenu As Long, lgNbMenu As Long
Dim
hSubMenu As Long, lgNbSousMenu As Long
Dim
lgRet As Long
Dim
I As Integer, J As Integer
Dim
stBuffer As String * 80
Dim lpItemInfo As MENUITEMINFO

AfficheItemsMenu =
True
' Récupère un pointeur vers le menu courant
hMenu = GetMenu(frmTmp.hwnd)
' Récupère le nombre d'élément de premier niveau
lgNbMenu = GetMenuItemCount(hMenu)
' Parcours les éléments de premier niveau
For I = 0 To lgNbMenu - 1
   
' Mise à jour de la structure
   
lpItemInfo.cbSize = 44
    lpItemInfo.dwTypeData = stBuffer & Chr$(0)
    lpItemInfo.fType = MF_STRING
    lpItemInfo.cch = 80
    lpItemInfo.fState = MFS_DEFAULT
    lpItemInfo.fMask = MIIM_ID
Or MIIM_STATE Or MIIM_TYPE Or MIIM_SUBMENU
   
' Récupère le contenu du menu
   
lgRet = GetMenuItemInfo(hMenu, I, True, lpItemInfo)
    lpItemInfo.dwTypeData = Replace(lpItemInfo.dwTypeData, Chr$(0), vbNullString)
   
' Affiche le menu dans le contrôle ListBox
   
lstTmp.AddItem lpItemInfo.dwTypeData
   
' Récupère un pointeur vers le sous-menu
   
hSubMenu = GetSubMenu(hMenu, I)
   
' Récupère le nombre de sous-menus
   
lgNbSousMenu = GetMenuItemCount(hSubMenu)
   
' Parcours des éléments de second niveau
   
For J = 0 To lgNbSousMenu - 1
       
' Mise à niveau de la structure
       
lpItemInfo.cbSize = 44
        lpItemInfo.dwTypeData = stBuffer & Chr$(0)
        lpItemInfo.fType = MF_STRING
        lpItemInfo.cch = 80
        lpItemInfo.fState = MFS_DEFAULT
        lpItemInfo.fMask = MIIM_ID
Or MIIM_STATE Or MIIM_TYPE Or MIIM_SUBMENU
       
' Récupère le contenu du sous-menu
       
lgRet = GetMenuItemInfo(hSubMenu, J, True, lpItemInfo)
        lpItemInfo.dwTypeData = Replace(lpItemInfo.dwTypeData, _
                                        Chr$(0), vbNullString)
       
' Affiche le menu dans le contrôle ListBox
       
lstTmp.AddItem Space$(8) & lpItemInfo.dwTypeData
   
Next
Next
End Function

Retour à la liste des API

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr