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 ~

Divers : Alignement de menu
Changer l'alignement par défaut d'un menu.
(Consulté 21446 fois.)

Il est possible de placer un menu autre part qu'automatiquement à gauche comme cela est fait par visual basic. Il peut être positionné à droite. Cela n'est pas forcément recommandé, les "normes" actuelles de présentation tendent à laisser les menus ou ils sont (à gauche). M'enfin, ca peut apporter une touche d'originalité à un programme. Sous Windows 3.x c'est généralement le menu d'aide qui se trouvait à cet endroit là.
Le code qui effectue la manipulation doit par contre se trouver dans le Form_Load de la fenêtre concerné.

' Déclaration de fonctions API
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, _
               lpMenuItemInfo
As MENUITEMINFO) As Long
Public Declare Function
SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" ( _
              
ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, _
               lpcMenuItemInfo
As MENUITEMINFO) As Long
Public Declare Function
DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

' Déclaration de constantes
Public Const MF_STRING = &H0&
Public Const MF_HELP = &H4000&
Public Const MFS_DEFAULT = &H1000&
Public Const MIIM_ID = &H2
Public Const MIIM_SUBMENU = &H4
Public Const MIIM_TYPE = &H10
Public Const MIIM_DATA = &H20

' Déclaration du type MENU
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

' Tout le code suivant doit être placé dans l'évènement
' Form_Load de la fenêtre concernée.

' Déclaration des variables utilisées
Dim mnuMenuItem As MENUITEMINFO
Dim lgMenu As Long
Dim
stBuffer As String * 80
...
' Récupère le handle du menu
lgMenu = GetMenu(Me.hwnd)
stBuffer = Space$(80)
' Initialisation de la variable
With mnuMenuItem
    .cbSize = Len(mnuMenuItem)
    .dwTypeData = stBuffer & Chr$(0)
    .fType = MF_STRING
    .cch = Len(mnuMenuItem.dwTypeData)
    .fState = MFS_DEFAULT
    .fMask = MIIM_ID
Or MIIM_DATA Or MIIM_TYPE Or MIIM_SUBMENU
End With
' Mettre l'indice correspondant au menu à placer à droite à la place 1.
' Les indices de menu commencent à partir de 0.
' Cela ne concerne que les menu de premier niveau.
If GetMenuItemInfo(lgMenu, 1, True, mnuMenuItem) = 0 Then
   
MsgBox "Erreur GetMenuItemInfo. " & Err.LastDllError, vbExclamation, "Erreur"
Else
 
  mnuMenuItem.fType = mnuMenuItem.fType Or MF_HELP
   
If SetMenuItemInfo(lgMenu, 1, True, mnuMenuItem) = 0 Then
     
  MsgBox "Erreur SetMenuItemInfo. " & Err.LastDllError, _
        vbExclamation, "Erreur"
   
End If
End If
' Rafraîchissement du menu
MenuDrawMenuBar (Me.hwnd)
...
Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr