|
|
|
|
|
Dicas
|
|
Visual Basic (Menu/Toobar/Coolbar)
|
|
|
Título da Dica: Como alinhar um menu na extrema direita da janela
|
|
|
|
Postada em 9/9/2003 por Ð@®l@n
O código abaixo utiliza algumas chamadas de API para fazer o alinhamento de um menu a direita. Para testa-lo crie um projeto standard, adicione 3 menus, copie o código no general do form e teste. O último menu será alinhado na extrema direita da tela.
2 linhas do código podem ser alteradas : If GetMenuItemInfo(hMenu, 2, True, mnuItemInfo) = 0 Then
e
If SetMenuItemInfo(hMenu, 2, True, mnuItemInfo) = 0 Then
O número 2 nestas linhas indica o número do menu que será jogado para a direita (iniciando em 0, o 3o menu). Todos os menus posteriores ao número indicado serão jogados para a direita.
Veja o código :
Option Explicit
Private 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
Private Const MF_STRING = &H0& Private Const MF_HELP = &H4000& Private Const MFS_DEFAULT = &H1000&
Private Const MIIM_ID = &H2 Private Const MIIM_SUBMENU = &H4 Private Const MIIM_TYPE = &H10 Private Const MIIM_DATA = &H20
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" _ Alias "GetMenuItemInfoA" _ (ByVal hMenu As Long, ByVal un As Long, ByVal B As Boolean, _ lpMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function SetMenuItemInfo Lib "user32" _ Alias "SetMenuItemInfoA" _ (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, _ lpcMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) _ As Long
Private Sub Form_Load() Dim mnuItemInfo As MENUITEMINFO, hMenu As Long Dim BuffStr As String * 80 ' Define as largest possible menu text.
hMenu = GetMenu(Me.hwnd) ' Retrieve the menu handle. BuffStr = Space(80) With mnuItemInfo ' Initialize UDT .cbSize = Len(mnuItemInfo) ' 44 .dwTypeData = BuffStr & Chr(0) .fType = MF_STRING .cch = Len(mnuItemInfo.dwTypeData) ' 80 .fState = MFS_DEFAULT .fMask = MIIM_ID Or MIIM_DATA Or MIIM_TYPE Or MIIM_SUBMENU End With ' Use the desired item's position for the '3' below (zero-based list). If GetMenuItemInfo(hMenu, 2, True, mnuItemInfo) = 0 Then MsgBox "GetMenuItemInfo failed. Error: " & Err.LastDllError, , _ "Error" Else mnuItemInfo.fType = mnuItemInfo.fType Or MF_HELP If SetMenuItemInfo(hMenu, 2, True, mnuItemInfo) = 0 Then MsgBox "SetMenuItemInfo failed. Error: " & Err.LastDllError, , _ "Error" End If End If DrawMenuBar (Me.hwnd) ' Repaint top level Menu End Sub
|
|
|
|
|