L'implementazione di una bitmap in un menu di Visual Basic

Traduzione articoli Traduzione articoli
Identificativo articolo: 71281 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

Sommario

Nessun comando fornito dal linguaggio Visual Basic possibile aggiungere un'immagine bitmap del sistema di menu. Tuttavia, è possibile chiamare diverse funzioni di API Windows per inserire una bitmap all'interno del sistema dal menu di un programma Visual Basic. È inoltre possibile modificare il segno di spunta predefinito visualizzato.

Informazioni

Esistono diverse funzioni API di Windows è possibile chiamare che verranno visualizzata una bitmap anziché un testo nel sistema di menu.

Di seguito è un elenco delle funzioni API Windows necessarie:
  • % GetMenu (hwnd %)
       hwnd%   -  Identifies the window whose menu is to be examined
       Returns:   Handle to the menu
    
    						
  • % 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
    
    						
  • % 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
    
    						
  • % SetMenuItemBitmaps (hMenu %, % nPos, flag %, % 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.
    
    						
Esistono due modi per implementare la bitmap in Visual Basic: il primo metodo è utilizzare bitmap statica; l'altro metodo è utilizzare bitmap dinamica.

Una bitmap statica è fisso ma non viene modificata durante l'esecuzione del programma (ad esempio, quando è tratto da un file BMP non modificabili). Una bitmap dinamica modifica durante l'esecuzione del programma. È possibile modificare gli attributi di bitmap dinamico quali colore, dimensioni e testo. Il codice di esempio riportato di seguito viene descritto come creare entrambi i tipi di menu.

Definire un sistema di menu utilizzando la finestra di progettazione di menu. Creare un sistema di menu come quello riportato di seguito:
    Caption      Control Name   Indented     Index
    --------------------------------------------------------
    BitMenu      TopMenu        No
    Sub Menu0    SubMenu        Once         0
    Sub Menu1    SubMenu        Once         1
    Sub Menu2    SubMenu        Once         2
				

Creare una matrice del controllo immagine con tre immagini bitmap tre controlli immagine con lo stesso nome utilizzando la casella di riepilogo proprietà del controllo.
    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
				

Per ogni indice di controllo del Picture1, aggiungere un'immagine bitmap valida alla proprietà Picture. Poiché tali bitmap verrà visualizzata nel menu, è necessario utilizzare bitmap di dimensioni inferiori. Aggiungere un'immagine bitmap alla proprietà Picture2 immagine che si desidera che il segno di spunta quando si seleziona un'opzione di menu.

Entrambi i tipi di implementazioni di bitmap necessario sono le seguenti dichiarazioni nella sezione globale del codice o dichiarazione:
' 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
				

Inoltre verrà devono essere definite per gestire la ridefinizione effettivo dell'immagine bitmap "controllo" il Sub riportata di seguito:
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
				

Riferimenti

"Programmazione Windows: Microsoft Guide per la scrittura di applicazioni per Windows 3," Charles Petzold, Microsoft Press, 1990

"Microsoft Windows Software Development Kit: riferimento volume 1," versione 3.0

File WINSDK.HLP fornito con Microsoft Windows 3.0 SDK

Proprietà

Identificativo articolo: 71281 - Ultima modifica: mercoledì 5 febbraio 2014 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 1.0 Standard Edition
Chiavi: 
kbnosurvey kbarchive kbmt KB71281 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 71281
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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