Corso di Visual C++

Utilizzare i menu II

 

Nella scorsa puntata abbiamo esaminato le proprietà principali dei menu: ID, Caption e Prompt.
Le proprietà secondarie utili dei menu invece sono Grayed, Inactive, Checked, Pop-up, e Separator.
La prima della lista rende grigia una voce e quindi non cliccabile, la seconda la rende comunque non cliccabile, ma la lascia del colore originario. Checked aggiunge un segno di spunta alla voce, Pup-up inserisce la freccina verso destra per consentire di inserire un sottomenu e Separator inserisce una linea di divisione orizzontale.

Per esercitarci creiamo una voce nel menu Visualizza e chiamiamola ProvaMenu, mettiamo come suo ID: ID_VIEW_PROVAMENU.

A questo punto siamo ormai esperti su come si crea graficamente un menu, ora bisogna collegarlo alle funzioni della nostra applicazione: niente di più facile,no?

Basta selezionare la voce nell'editor di risorse e con il tasto destro del mouse cliccare sulla voce ClassWizard. Qui vedremo l'identificatore della nostra voce nel riquadro di sinistra e a destra le due voci COMMAND e UPDATE_COMMAND_UI. Se facciamo doppio clic su COMMAND il Wizard ci chiederà il nome della funzione che dovrà essere richiamata quando si seleziona quella voce di menu. Facendo invece doppio clic su UPDATE_COMMAND_UI il Wizard ci chiederà il nome della funzione che deve sincronizzare lo stato di quella voce di menu con lo stato dell'applicazione (questo lo vedremo in seguito).

Proviamo a seguire questo procedimento per la voce ProvaMenu che abbiamo aggiunto noi. Una volta che abbiamo fatto doppio clic su COMMAND, il Wizard ci propone come nome di funzione OnViewProvamenu, noi confermiamo e poi facciamo doppio clic su questo nome di funzione che è stato aggiunto in basso; in questo modo scompare la finestra del Wizard e ci troviamo con il codice della nostra funzione davanti. Per scegliere in quale classe inserire la funzione (di default CMainFrame), basta che nel Wizard, come ben sappiamo, scegliamo la classe giusta dalla casella a discesa ClassName in alto a destra.

Nella nostra funzione OnViewProvamenu, inserite il seguente codice:

AfxMessageBox("Ciao Software Planet!");

Con questa riga di codice si fa si che appaia sullo schermo una finestrella (una finestra di messaggio detta MessageBox) con dentro la stringa da noi specificata.

Se non riuscite a trovare più la funzione perché magari nel frattempo ve ne siete andati gironzolando tra le finestre del VC++, selezionate ClassView (la prima scheda sulla destra), quindi la classe CMainFrame e tra le funzioni di queste troverete anche la vostra pecorella smarrita.
 
Ora compilate tutto e vedete cosa succede.

Non abbiamo fatto molto, oltre che parlare di tanti aspetti dei menu; il loro uso vero e proprio richiede di fare solo 3 o 4 click qua e la. Però della teoria di base è sempre importante, ci permetterà in futuro di capire meglio il S.O. e di sapere dove cercare gli errori apparentemente inspiegabili.

Se siete d’accordo continuiamo ad approfondire l’argomento, se non lo siete, lo facciamo comunque! (smile)

Quando un utente clicca su una voce di menu superiore, Windows genera una grande quantità di messaggi; a noi solitamente questi non interessano visto che servono per implementare comportamenti gestiti automaticamente dal sistema operativo. Questi potrebbero servire però ai più smaliziati quando più in la vorranno creare voci di menu personalizzate con bitmap, suoni e tutto quanto si desideri.
Tra i primi messaggi che arrivano (oltre a quello di clic del mouse o di tasto premuto della tastiera) c’è WM_INITMENU. Questo messaggio notifica che è stata selezionata una voce e che sta per essere visualizzato un menu. Prima che questo appaia sullo schermo arriva un messaggio WM_INITMENUPOPUP.
Ricordo che i menu a discesa sono sempre e comunque dei menu popup, con l’unica differenza che la loro origine è predefinita ed è dipendente dalla posizione della voce di menu cliccata.

I vecchi (smile) programmatori in C erano soliti agganciare questo messaggio per impostare lo stato delle voci di menu e sincronizzarle con lo stato dell’applicazione (spuntavano, abilitavano e disabilitavano voci). Oggi ciò è fatto in un modo molto più semplice grazie ad MFC e all’infrastruttura del FrameWork di applicazione.

Clicca sull'icona del floppy per scaricare il progetto Prg36.
Clicca sull'icona del floppy per scaricare direttamente l'eseguibile Prg36.exe

Per oggi può bastare con la teoria, avete molto da sperimentare con tutto quanto esposto; spero di trovarvi preparati per la prossima lezione, ahimè, ancora teorica.

 

Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet