Come già annunciato inizieremo con questa puntata la trattazione
dei menu.
I menu sono tra gli elementi di interfaccia utente più semplici
ed intuitivi per l'utilizzo anche da parte dei meno esperti, e sono
inoltre un'ottimo strumento per accedere alle maggioranza delle
funzioni dei programmi.
Anni fa in ambiente DOS e Linux questi non esistevano e si era costretti
ad imparare a memoria molte sequenze di tasti per accedere alle
varie funzioni che l'applicativo metteva a disposizione.
Oggi questo non è più necessario anche se i più esperti, per questioni
di rapidità, preferiscono comunque imparare a memoria le sequenze
di tasti per accedere alle funzioni usate più di frequente.
Quello che ha maggiormente decretato il successo dei menu (oltre
alla già menzionata semplicità) è il fatto che questi sono elementi
a struttura gerarchica. Ciò sta a significare che man mano che si
scende di livello nei sottomenu, si accede a funzioni più specifiche
del menu di livello superiore. Questo consente sia di risparmiare
spazio, sia di aumentare in produttività dato che non bisogna cercare
tra decine di voci mescolate confusamente.
I menu si suddividono in due categorie principali: quelli a discesa
e quelli popup. L'unica differenza è che i primi sono quelli standard
che compaiono sotto la barra del titolo, mentre i secondi sono quelli
a comparsa che appaiono di solito per visualizzare il menu di contesto
(il menu associato alla pressione del tasto destro del mouse).
Per il resto sono perfettamente identici tranne per il fatto che
per i menu popup si può scegliere il punto in cui visualizzarli.
Windows fornisce molte funzioni per trattare i menu ed il sistemo
operativo fa per noi il 95% del lavoro, se poi usiamo MFC ed il
Wizard tale percentuale arriva al 99% (dobbiamo avere la pazienza
di fare un paio di click per collegare la voce di menu alla nostra
funzione). Queste funzioni coprono anche le esigenze più particolari
come ad esempio di visualizzare al posto di voci testuali delle
bitmap o ancora testo+bitmap (in questo caso però il Wizard ci abbandona
e dovremo lavorare molto di codice)
L'infrastruttura del Windows si preoccupa di tenere anche le voci
aggiornate con lo stato dell'applicazione e pian piano vedremo come
si fa e come funziona il tutto.
Per la creazione dei menu è possibile usare vari approcci, il più
semplice è sicuramente quello di utilizzare il Wizard ed è anche
quello che utilizzeremo nella maggioranza delle situazioni. Un altro
approccio è quello di editare manualmente il file delle risorse,
ma questo lo scartiamo subito perché è solo un lavoraccio inutile
e che non ci porta alcun vantaggio.
Un approccio che invece utilizzeremo è quello di utilizzare le
funzioni della classe CMenu, un wrapper di alcune API di Win32.
Grazie a questa classe potremo creare dinamicamente i menu, visualizzarli,
modificarli e farci tutti i giochetti che vorremo.
Creare dinamicamente un menu significa che possiamo creare un menu
in base alle esigenze del programma a tempo di esecuzione con tutti
i vantaggi del caso. Questo approccio è molto utilizzato principalmente
per i menu di tipo popup, ma nessuno vieta di utilizzarlo per i
menu a discesa. Quando utilizziamo il Wizard invece creiamo dei
menu statici, nel senso che il file delle risorse una volta compilato
e linkato va a far parte del codice sorgente dell'eseguibile e non
è più modificabile.
Un menu da menzionare è sicuramente quello di sistema ed è quello
che appare in tutte le applicazioni Windows quando si clicca col
pulsante sinistro del mouse sull'icona dell'applicazione della barra
del titolo o quando con il tasto destro si clicca su tale barra
o ancora quando si preme ALT+BARRA SPAZIATRICE. Tale menu contiene
le voci per spostare, ridimensionare, chiudere, ingrandire, ridurre
a icona e ripristinare l'applicazione. Tutto ciò è fornito di default
dal Windows.
Le voci di menu presenti sotto la barra del titolo sono dette voci
di menu principali o di livello superiore, le voci che compaiono
premendo su di esse sono dette voci di menu di livello inferiore
e possono contenere a loro volta altre voci di menu di livello ancora
inferiore. Tutte queste possono formare una struttura nidificata
a più livelli; naturalmente conviene non esagerare troppo e cercare
di non superare i due livelli di nidificazione.
Ad ogni voce di menu (di qualsiasi livello) è associato un handle
di tipo HMENU. Questo handle (maniglia) consente di riferirsi univocamente
a quella particolare voce per elaborazioni con la classe CMenu.
Nella prossima puntata vedremo come creare voci di menu con il Wizard
e come collegarle al nostro codice sorgente.
Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet