La funzione HiliteMenuItem (Tutorial completo)
Questa funzione, dobbiamo proprio ammetterlo, ha un rilievo del tutto marginale
rispetto alle API legate ai menu che abbiamo visto in precendenza.
La funzione principale di HiliteMenuItem è quella di selezionare, evidenziandola,
una particolare voce di un menu.
La dichiarazione dell'API è piuttosto semplice e non si discosta di molto da quelle
già analizzate prima d'ora:
Declare Function HiliteMenuItem Lib "user32" (ByVal hWnd As Long, _
ByVal hMenu As Long,
ByVal uItemHilite As Long, ByVal uHilite _
As Long) As Long
|
Si tratta di un'API contenuta in user32.dll, dunque. A ciò possiamo agiungere che
necessita di quattro parametri 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 HiliteMenuItem sarà
proprio lo zero.
Questi sono i parametri:
| hWnd |
E' il riferimento alla finestra
che contiene il menu di cui si vuole selezionare una voce
|
| hMenu |
E' l'indicatore del menu
che contiene la voce da selezionare
|
| uItemHilite |
Specifica la voce del menu
da selezionare. L'individuazione di una voce del menu dipende da quanto
impostato nel parametro uHilite
|
| uHilite |
Specifica come interpretare
la posizione della voce del menu come indicato da uitemHilite: il parametro
uHilite può deve contenere almeno un flag che identifica la posizione ed uno
che identifica l'operazione:
MF_BYCOMMAND in questo caso uPosition dà il numero identificatore dalla voce
del menu specificato;
MF_BYPOSITION in questo caso uPosition dà invece la posizione della voce in una
numerazione che parte da 0: la prima voce del menu ha quindi indice 0, la seconda 1 e così
via fino ad n voci;
MF_HILITE seleziona la voce;
MF_UNHILITE deseleziona la voce
|
dunque le possibilità per il parametro uHilite sono MF_BYCOMMAND o MF_BYPOSITION e
MF_HILITE o MF_UNHILITE.
Facciamo un esempio. Dichiariamo la funzione con i rispettivi flags, oltre alle funzioni
GetMenu e GetSubMenu:
Private Declare Function HiliteMenuItem Lib "user32" (ByVal hWnd As Long, _
ByVal hMenu As Long,
ByVal uItemHilite As Long, ByVal uHilite _
As Long) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Private Const MF_BYPOSITION = &H400
Private Const MF_BYCOMMAND = &H0
Private Const MF_HILITE = &H80
Private Const MF_UNHILITE = &H0
|
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.
Sapendo che il primo parametro è Form1.hWnd,
bisognerà lavorare maggiormente sul secondo parametro: l'indicatore del menu (o meglio
del sottomenu) nel quale è compresa la voce desiderata,
si ricava dal menu principale...:
Private Sub Form_Load()
Menu = GetMenu(Form1.hWnd)
|
...indicando il sottomenu desiderato:
|
sMenu = GetSubMenu(Menu, 0)
|
In questo caso abbiamo indicato il primo sottomenu come contenente la voce
che c'interessa selezionare.
Possiamo a questo punto richiamare la funzione:
|
HiliteMenuItem Form1.hWnd, sMenu, 0, MF_BYPOSITION Or MF_HILITE
|
dove abbiamo indicato con lo 0 che la voce da selezionare è la prima (avendo usato
una numerazione che, data da MF_BYPOSITION parte proprio da zero) ed abbiamo
utilizzato l'operazione data dal flag MF_HILITE che seleziona la voce del menu.
Riportiamo di seguito l'esempio completo:
Private Declare Function HiliteMenuItem Lib "user32" (ByVal hWnd As Long, _
ByVal hMenu As Long,
ByVal uItemHilite As Long, ByVal uHilite _
As Long) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Private Const MF_BYPOSITION = &H400
Private Const MF_BYCOMMAND = &H0
Private Const MF_HILITE = &H80
Private Const MF_UNHILITE = &H0
Private Sub Form_Load()
Menu = GetMenu(Form1.hWnd)
sMenu = GetSubMenu(Menu, 0)
HiliteMenuItem Form1.hWnd, sMenu, 0, MF_BYPOSITION Or MF_HILITE
End Sub
|
|