Como implementar um mapa de bits dentro de um menu de Visual Basic

Traduções de Artigos Traduções de Artigos
Artigo: 71281 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Sumário

Sem comando fornecido pela linguagem Visual Basic pode adicionar um mapa de bits do sistema de menus. No entanto, é possível chamar várias funções API do Windows para colocar um mapa de bits no sistema de menu de um programa do Visual Basic. Pode também alterar a marca predefinida apresentada.

Mais Informação

Existem várias funções API do Windows pode chamar que apresentará um mapa de bits em vez de texto no sistema de menu.

Abaixo se uma lista das funções API do Windows necessárias:
  • GetMenu % (hwnd %)
       hwnd%   -  Identifies the window whose menu is to be examined
       Returns:   Handle to the menu
    
    						
  • % De GetSubMenu (hMenu %, nPos %)
       hMenu%  - Identifies the menu
       nPos%   - Specifies the position (zero-based) in the
                 given menu of the pop-up menu
       Returns:  Handle to the given pop-up menu
    
    						
  • % De GetMenuItemID (hMenu %, nPos %)
       hMenu%  - Identifies the handle to the pop-up menu that
                 contains the item whose ID is being retrieved
       nPos%   - Specifies the position (zero-based) of the menu
                 whose ID is being retrieved
       Returns:  The item ID for the specified item in the pop-
                 up menu
    
    						
  • % ModifyMenu (hMenu %, nPos %, wFlags %, wIDNewItem %, lpNewItem &)
        hMenu%  - Identifies the handle to the pop-up menu that
                  contains the item whose ID is being retrieved
        nPos%   - Specifies the menu item to be changed. The
                  interpretation of the nPos parameter depends
                  on the wFlags parameter.
        wFlags% - BF_BITMAP  =  &H4
        wIDNewItem% - Specifies the command ID of the modified menu item
        lpNewItem&  - 32-bit handle to the bitmap
        Returns:  TRUE (-1) if successful, FALSE (0) if unsuccessful
    
    						
  • % De SetMenuItemBitmaps (hMenu % nPos %, sinalizadores %, hBitmapUnchecked %, hBitmapChecked %)
        hMenu%  - Identifies menu to be changed
        nPos%   - Command ID of the menu item
        wFlags% - &H0
        hBitmapUnchecked% - Handle to "unchecked" bitmap.
        hBitmapChecked%)  - Handle to the "check" bitmap.
        Returns: TRUE (-1) if successful, FALSE (0) if unsuccessful.
    
    						
Existem duas formas diferentes para implementar os mapas de bits no Visual Basic: o primeiro método é utilizar mapas de bits estáticos; o método é utilizar mapas de bits dinâmicos.

Um mapa de bits estático é fixas e não é alterado durante a execução do programa (tal como quando é retirado de um ficheiro .bmp inalterável). Um mapa de bits dinâmico é alterado durante a execução do programa. Pode alterar os atributos de mapa de bits dinâmicos, tais como cor, tamanho e o texto. O código de exemplo abaixo descreve como criar ambos os tipos de menus.

Defina um sistema de menu utilizando a janela de estrutura do menu. Crie um sistema de menu como o seguinte:
    Caption      Control Name   Indented     Index
    --------------------------------------------------------
    BitMenu      TopMenu        No
    Sub Menu0    SubMenu        Once         0
    Sub Menu1    SubMenu        Once         1
    Sub Menu2    SubMenu        Once         2
				

Crie uma matriz de controlo de imagem com três mapas de bits, criando três controlos de imagem com o mesmo nome utilizando a caixa de lista de propriedades de controlo.
    Control Name   Caption   Index     FontSize
    ----------------------------------------------------------------
    Picture1                  0           N/A
    Picture1                  1           N/A
    Picture1                  2           N/A
    Picture2                  N/A         N/A  'check BMP
    Picture3                  0           'set Picture3 FontSize all
                                           different
    Picture3                  1           9.75
    Picture3                  2           18
    Command1       Static
    Command2       Dynamic
				

Para cada controlo índice Picture1, adicione um mapa de bits válido a propriedade imagem. Uma vez que estes mapas de bits vão ser apresentados no menu, deverá utilizar mapas de bits pequenos. Adicione um mapa de bits a propriedade Picture2 imagem que pretende que a marca de verificação quando selecciona uma opção de menu.

Ambos os tipos de implementações de mapa de bits têm de ter as declarações seguintes na secção global do código de declaração ou:
' Enter each Declare statement on one, single line:
Declare Function GetMenu% Lib "user" (ByVal hwnd%)
Declare Function GetSubMenu% Lib "user" (ByVal hMenu%, ByVal nPos%)
Declare Function GetMenuItemID% Lib "user" (ByVal hMenu%, ByVal nPos%)
Declare Function ModifyMenu% Lib "user" (ByVal hMenu%, ByVal nPosition%,
   ByVal wFlags%, ByVal wIDNewItem%, ByVal lpNewItem&)
Declare Function SetMenuItemBitmaps% Lib "user" (ByVal hMenu%,
   ByVal nPosition%, ByVal wFlags%, ByVal hBitmapUnchecked%,
   ByVal BitmapChecked%)
Const MF_BITMAP = &H4
Const CLR_MENUBAR = &H80000004 ' Defined for dynamic bitmaps only.
Const TRUE = -1, FALSE = 0
Const Number_of_Menu_Selections = 3
				

Sub seguinte também terão de ser definido para tratar a redefinição real do mapa de bits "verificação":
Sub SubMenu_Click (Index As Integer)
' Uncheck presently checked item, check new item, store
' index
   Static LastSelection%
   SubMenu(LastSelection%).Checked = FALSE
   SubMenu(Index).Checked = TRUE
   LastSelection% = Index
End Sub

Sub Command1_Click ()
  '* example to create a static bitmap menu
  hMenu% = GetMenu(hWnd)
  hSubMenu% = GetSubMenu(hMenu%, 0)
  For i% = 0 To Number_of_Menu_Selections - 1
    menuId% = GetMenuItemID(hSubMenu%, i%)
    x% = ModifyMenu(hMenu%, menuId%, MF_BITMAP, menuId%,
                    CLng(picture1(i%).Picture))
    x% = SetMenuItemBitmaps(hMenu%, menuId%, 0, 0,
                    CLng(picture2.Picture))
  Next i%
End Sub

'This code sample will change the actual menu bitmaps size,
'font size, color, and caption. Run the application and
'select the BitMenu and view the selections. Then click
'the form and revisit the BitMenu.
'---------------------------------------------------------

Sub Command2_Click ()
   '* Example to create a dynamic menu system
   hMenu% = GetMenu(hWnd)
   hSubMenu% = GetSubMenu(hMenu%, 0)
   For i% = 0 To Number_of_Menu_Selections - 1
   '* Place some text into the menu.

      SubMenu(i%).Caption = Picture3(i%).FontName +
                Str$(Picture3(i%).FontSize) + " Pnt"

   '* 1. Must be AutoRedraw for Image().
   '* 2. Set Backcolor of Picture control to that of the
   '*    current system Menu Bar color, so Dynamic bitmaps
   '*    will appear as normal menu items when menu bar
   '*    color is changed via the control panel
   '* 3. See the bitmaps on screen, this could all be done
   '*    at design time.

     Picture3(i%).AutoRedraw = TRUE
     Picture3(i%).BackColor = CLR_MENUBAR
   '* You can uncomment this
   '* Picture3(i%).Visible = FALSE

   '* Set the width and height of the Picture controls
   '* based on their corresponding Menu items caption,
   '* and the Picture controls Font and FontSize.
   '* DoEvents() is necessary to make new dimension
   '* values to take affect prior to exiting this Sub.

    Picture3(i%).Width = Picture3(i%).TextWidth(SubMenu(i%).Caption)
    Picture3(i%).Height = Picture3(i%).TextHeight(SubMenu(i%).Caption)
    Picture3(i%).Print SubMenu(i%).Caption

   '* - Set picture controls backgroup picture (Bitmap) to
   '*   its Image.
     Picture3(i%).Picture = Picture3(i%).Image
     x% = DoEvents()
   Next i%

    '* Get handle to forms menu.
   hMenu% = GetMenu(Form1.hWnd)

   '* Get handle to the specific menu in top level menu.
   hSubMenu% = GetSubMenu(hMenu%, 0)

   For i% = 0 To Number_of_Menu_Selections - 1

   '* Get ID of sub menu
     menuId% = GetMenuItemID(hSubMenu%, i%)

   '* Replace menu text w/bitmap from corresponding picture
   '* control
     x% = ModifyMenu(hMenu%, menuId%, MF_BITMAP, menuId%,
              CLng(Picture3(i%).Picture))  'append this to previous line

   '* Replace bitmap for menu check mark with custom check
   '* bitmap
     x% = SetMenuItemBitmaps(hMenu%, menuId%, 0, 0, CLng(picture2.Picture))
   Next i%
End Sub
				

Referências

"Windows de programação: a Microsoft Guide to escrever aplicações para o Windows 3," Carlos Petzold, Microsoft Press, 1990

"Microsoft Windows Software Development Kit: referência volume 1," versão 3.0

Ficheiro WINSDK.HLP fornecido com o Microsoft Windows 3.0 SDK

Propriedades

Artigo: 71281 - Última revisão: 2 de fevereiro de 2014 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 1.0 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt KB71281 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 71281

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com