Per completare la trattazione dobbiamo solo parlare dei menu di
contesto, cioè i menu popup che vengono attivati solitamente con
il tasto destro del mouse.
Ricordo che i menu popup o a comparsa sono menu non attaccati ai
menu di livello superiore.
Questi menu sono molto importanti nei sistemi operativi Windows,
sono infatti molto utilizzati (anche più dei normali menu a discesa)
e velocizzano le più comuni operazioni.
Gli sviluppatori sono inoltre incoraggiati ad utilizzarli per essere
coerenti con il resto della shell del sistema operativo.
Solitamente in un menu di contesto sono elencate voci che richiamano
funzioni applicabili alloggetto sotto il puntatore del mouse,
è per questo motivo che si chiama menu di contesto.
Ed è anche per questo motivo che molto questi menu vengono solitamente
gestiti dinamicamente a runtime.
Di solito si crea una risorsa menu aggiuntiva ed in questa si aggiungono
tanti popup (ognuno sotto una diversa voce di menu di livello superiore)
quanti sono i diversi menu di contesto dellapplicazione; poi
al momento giusto, quanto lutente fa clic con il pulsante
destro su un oggetto, si visualizza il menu adatto.
Windows facilita ulteriormente luso dei menu di contesto
dato che al momento della pressione del tasto destro del mouse invia
un messaggio WM_CONTEXTMENU, quindi non cè bisogno neanche
di utilizzare il messaggio WM_RBUTTONDOWN.
Per visualizzare un menu popup sullo schermo in una data posizione
occorre utilizzare la funzione TrackPopupMenu; questa ha
il seguente prototipo:
BOOL TrackPopupMenu (UNIT
nFlags, int x, int y, CWnd *pWnd, LPRECT lpRect = 0)
Il primo parametro, nFlags, consente di settare lallineamento
del menu rispetto alle coordinate del punto specificato con i successivi
due parametri.
Per tale scopo può assumere i seguenti valori: TPM_LEFTALIGN, TPM_CENTRALALIGN
e TPM_RIGHTALIGN; questi nellordine allineano il bordo superiore
del menu a sinistra, al centro o a destra rispetto al punto. Ognuno
esclude laltro e per ovvie ragioni non possono essere messi
in or.
Tale parametro consente inoltre di specificare con quali pulsanti
del mouse è possibile selezionare le voci di menu; i valori che
può assumere sono TPM_LEFTBUTTON e TPM_RIGHTBUTTON.
Questi possono essere messi anche in or in modo da consentire di
cliccare sulle voci di menu con entrambi i pulsanti.
Il terzo parametro, pWnd, identifica la finestra che riceverà
i messaggi del mouse generati dallinterazione dellutente
con il menu a comparsa e che quindi possiede anche il menu. Solitamente
questo parametro assume il valore this ad indicare la finestra
corrente che sta creando e visualizzando il menu.
Lultimo parametro, lpRect, è un puntatore ad un oggetto
di tipo RECT che specifica, in coordinate di schermo, larea
allinterno del quale lutente può cliccare senza far
scomparire il menu. Specificando un valore NULL si fa si che un
click allesterno del bordo del menu lo faccia scomparire.
Il valore di ritorno da TrackPopupMenu è diverso da zero
in caso di successo.
Il seguente enunciato di esempio visualizza il menu specificato
dal puntatore pMyMenu nellangolo in alto a sinistra
dello schermo, allinea il bordo sinistro al punto specificato e
consente di cliccare sulle voci sia con il pulsante destro che sinistro
del mouse.
PMyMenu-> TrackPopupMenu
(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, 0, 0, this);
Usare il menu di contesto in questo modo non è però la prassi, solitamente
si preferisce posizionare tale oggetto in dipendenza dalla posizione
del puntatore del mouse.
Cercate di provare a farlo da voi, se non ci riuscite vi rimando
alla prossima e ultima puntata in cui parleremo di menu.
Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet