Corso di Visual C++

Introduzione ai menu

 

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