Guide e Tutorials:indexed | ||||||||||||||||||||
La funzione SetMenuItemBitmaps (Tutorial completo) Avendo già una buona conoscenza delle funzioni necessarie a manipolare un menu, possiamo agevolmente affrontare il problema dell'inserimento di una bitmap all'interno di un menu. Problema risolto da Microsoft che ha dato vita alla SetMenuItemBitmaps, funzione che associa ad una voce di un menu, una bitmap, ossia un'immagine ad alta definizione. La dichiarazione dell'API è piuttosto semplice e la funzione non è particolarmente ostica nel suo complesso:
Si tratta di un'API contenuta in user32.dll, dunque. In aggiunta possiamo dire che necessita di cinque parametri in forma numerica ed in particolare cinque interi a 32 bit. Il valore di ritorno è allo stesso modo un Long diverso da zero se la funzione ha successo. In caso di fallimento il valore restituito dalla SetMenuItemBitmaps sarà proprio lo zero. Questi sono i parametri di cui si "nutre" la funzione:
Da ciò si ricava che non solo è possibile inserire una bitmap a piacere in un menu, ma anche che al passaggio del mouse sulle varie voci le immagini possono cambiare. Facciamo dunque un esempio per avere una maggiore confidenza con la SetMenuItemBitmaps. Tutte le funzioni dell'esempio, tranne naturalmente la SetMenuItemBitmaps, sono già stati ampiamente trattate singolarmente in precedenza. In caso di dubbi basterà andare recuperare l'articolo corrispondente dall'indice analitico di Guide e Tutorials. Iniziamo aprendo un progetto EXE Standard. Verrà creata per default una form denominata Form1. Creiamo un menu con l'editor di menu. Tale menu deve avere una struttura di questo tipo: &Menu1 ...&Voce1 ...&Voce2 &Menu2 ...&Voce1 ...&Voce2 ossia ogni menu deve contenere due voci. E siccome abbiamo già introdotto il tipo di immagine da usare, diciamo subito che la funzione SetMenuItemBitmaps non supporta le immagini con estensione .ico ma solo le bitmap pure, come si è visto anche relativamente alla struttura MENUITEMINFO. Una cosa che la SetMenuItemBitmpas non ci dice è che per poter utilizzare una bitmap nel menu, tale immagine deve avere una dimensione massima di 13x13 pixels. In caso contrario la funzione ritornerà un valore pari a 0 e il menu rimarrà tale e quale. Ritornando in fase di progettazione bisognerà trascinare sul piano tre controlli PictureBox nei quali inserire in ciascuno la bitmap che si preferisce. Troverete le bitmap adatte nella cartella di Microsoft Visual Studio contenente tutte le immagini a disposizione. Sarà anche necessario impostare la proprietà AutoRedraw della PictureBox su True. Ed eccoci finalmente al codice. Le dichiarazioni, le strutture e le costanti, già tutte analizzate singolarmente, non verranno ulteriormente trattate. Basti ricordare che siccome operiamo con una sola form, non sarà affatto necessario inserire le dichiarazioni delle funzioni nel modulo.
Notare che anche le costanti dei membri della struttura MENUITEMINFO sono già stati ampiamente trattati. Adesso vediamo il codice per l'evento Load di Form1. Bisognerà innanzitutto dire all'applicazione su quale menu principale lavorare. Il menu che a noi interessa è la classica barra posta in testa alla form:
dopodichè bisognerà indicare su quale sottomenu lavorare: Menu1 o Menu2:
dove la linea precedente utilizza la GetSubMenu per recuperare l'intero di riferimento che indica il sottomenu facente parte del menu che abbiamo denominato in precedenza "Menu" (la barra menu principale). Di Menu abbiamo scelto il primo sottomenu, in posizione 0, corrispondente nella fattispecie a "Menu1". Compiamo adesso un'operazione analoga per definire l'identificativo del sottomenu:
e per finire aggiungiamo la bitmap e chiudiamo il tutto con un End Sub:
indicando che vogliamo mantenere la stessa bitmap in ogni caso. Questo è dunque il codice completo, escluse le dichiarazioni che abbiamo visto all'inizio dell'esempio:
Se a questo punto volessimo inserire la seconda bitmap nella seconda voce del primo sottomenu, il codice appena visto si trasformerebbe in questo blocco:
dove nella funzione GetMenuItemID abbiamo sostituito 1 a 0 volendo indicare di considerare la seconda voce invece della prima ed abbiamo indicato l'immagine contenuta nella seconda PictureBox. Se a questo punto volessimo anche inserire la terza bitmap nella prima voce del secondo sottomenu:
dove questa volta abbiamo modificato il parametro della funzione GetSubMenu facendolo diventare 1 ed abbiamo indicato la terza immagine. |
Archivio:ndexed | ||||
Lezioni | Commenta questa lezione | Invia la tua guida | Avviso per le nuove lezioni | Proponi un argomento |
Visual Basic Italia© copyright 2000 - tutti i diritti riservati |