Guide e Tutorials:indexed
La funzione GetMenu (Tutorial completo)
Qualche tempo fa si è visto un esempio di come con una semplice applicazione si può avere sempre sotto controllo il contenuto di un menu, ossia l'insieme di tutte le voci, dove le voci possono essere rappresentate da più oggetti-menu (ad esempio una stringa di testo, un'immagine e così via). Ci eravamo ripromessi di analizzare una particolare funzione che compariva all'interno dell'esempio, la cui spiegazione era stata rimandata a tempi migliori.
Per completare l'esempio proponiamo uno studio sulla funzione in questione, ossia GetMenu (che se si ricorda appariva nelle dichiarazioni generali del modulo ma veniva comunque richiamata all'interno della form principale). Come ormai è consuetudine fare, vediamo la sintassi della dichiarazione di tale funzione

Declare Function GetMenu Lib "user32.dll" (ByVal hWnd As Long) As Long

Ed ancora per rispettare un'altra consuetudine, scatta il momento della solita pausa ristoratrice:
la funzione GetMenuItemCount supporta queste piattaforme:
Windows 95,98,2000: si
Windows NT: versione 3.1 o successiva
mentre Windows CE: no.
Riprendiamo per un attimo la dichiarazione della funzione. Possiamo senza dubbio applicare ciò che è stato visto nelle lezioni sulle dichiarazioni API e quindi dire che la funzione GetMenu richiede che le sia passato un solo parametro (hWnd) con formato di numero intero a 32 bit (As Long nella parentesi). Tale parametro deve essere passato alla funzione tramite il metodo ByValue (ByVal). La funzione a sua volta ritornerà un secondo intero a 32 bit (As Long dopo la parentesi). Ricordiamo brevemente che il metodo ByValue permette di trasferire alla funzione una variabile, il cui contenuto sarà immagazzinato dalla funzione stessa, la quale non avrà però la facoltà (o meglio, l'autorizzazione) di sovrascriverlo. Dunque passare alla funzione GetMenu la variabile hWnd col metodo ByVal significa che hWnd non perderà il valore che contiene.
Uscendo adesso da queste trattazioni, vediamo l'uso della funzione GetMenu. Essa viene usata per identificare quale barra menu considerare. Infatti ogni form ha una ed una sola barra menu per cui nel caso in cui si stia lavorando con una sola form, il problema non si pone. Ma se le form sono più di una, il programma deve capire, se si vuole lavorare con un menu specifico (cosa che si può fare ad esempio utilizzando tutte le altre funzioni relative ai menu presentate nell'indice analitico delle guide), a quale menu fare riferimento. La funzione come risultato ritornerà (piccola parentesi: le funzioni, a differenza delle sottoprocedure, ritornano sempre un valore numerico) un numero identificatore del menu assegnato alla form, con la premessa necessaria che nel caso una form non abbia una barra-menu, l'intero ritornato sarà pari a 0. Nel caso poi la form in questione sia una form child, il valore ritornato dalla funzione sarà insignificante.
Quello che bisognava dire su GetMenu è tutto nelle righe precedenti. Adesso possiamo soltanto vedere come si integra la funzione nell'esempio presentato nella lezione su GetMenuItemCount. In tale esempio infatti avevamo dichiarato la funzione GetMenu all'interno delle dichiarazioni del modulo .bas. Il richiamo alla funzione avveniva dal form secondo questo codice:

Private Sub Command1_Click()
Dim hMenu As Long
hMenu = GetMenu(Form1.hWnd)
ParlamiDeiMenu hMenu, 0
End Sub

In queste poche righe di codice è da sottolineare il fatto che la variabile hMenu viene dichiarata come intero a 32 bit. A tale intero viene associato l'identificatore (o ancora meglio: il numero identificatore) relativo alla barra menu del Form1 (Form1.hWnd). Mettiamo di avere tre form. La prima chiamata Form1, la seconda Form2 e la terza Form33 (tanto per evitare di essere banali...). A questo punto ci si deve chiedere: a quale menu si vuole fare riferimento? Al menu di Form1, di Form2 o di Form33? Specificando, come nell'esempio Form1.hWnd, si dice al programma di fare riferimento al menu di Form1, per cui tutte le funzioni che utilizzeranno la variabile hMenu (alla quale è stato assegnato l'identificatore del menu di Form1) faranno anche loro riferimento a Form1.

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
E-mail:
vbitalia@libero.it