Corso di Visual C++

Il menu di contesto

 

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 all’oggetto 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 dell’applicazione; poi al momento giusto, quanto l’utente fa clic con il pulsante destro su un oggetto, si visualizza il menu adatto.

Windows facilita ulteriormente l’uso 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  l’allineamento 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 nell’ordine allineano il bordo superiore del menu a sinistra, al centro o a destra rispetto al punto. Ognuno esclude l’altro 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 dall’interazione dell’utente 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.
L’ultimo parametro, lpRect, è un puntatore ad un oggetto di tipo RECT che specifica, in coordinate di schermo, l’area all’interno del quale l’utente può cliccare senza far scomparire il menu. Specificando un valore NULL si fa si che un click all’esterno 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 nell’angolo 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