Funzione TrackPopupMenu (winuser.h)

Visualizza un menu di scelta rapida nella posizione specificata e tiene traccia della selezione di elementi nel menu. Il menu di scelta rapida può essere visualizzato ovunque sullo schermo.

Sintassi

BOOL TrackPopupMenu(
  [in]           HMENU      hMenu,
  [in]           UINT       uFlags,
  [in]           int        x,
  [in]           int        y,
  [in]           int        nReserved,
  [in]           HWND       hWnd,
  [in, optional] const RECT *prcRect
);

Parametri

[in] hMenu

Tipo: HMENU

Handle del menu di scelta rapida da visualizzare. L'handle può essere ottenuto chiamando CreatePopupMenu per creare un nuovo menu di scelta rapida oppure chiamando GetSubMenu per recuperare un handle in un sottomenu associato a una voce di menu esistente.

[in] uFlags

Tipo: UINT

Usare zero di altri flag per specificare le opzioni di funzione.

Usare uno dei flag seguenti per specificare in che modo la funzione posiziona il menu di scelta rapida orizzontalmente.

Valore Significato
TPM_CENTERALIGN
0x0004L
Centra il menu di scelta rapida orizzontalmente rispetto alla coordinata specificata dal parametro x .
TPM_LEFTALIGN
0x0000L
Posiziona il menu di scelta rapida in modo che il lato sinistro sia allineato alla coordinata specificata dal parametro x .
TPM_RIGHTALIGN
0x0008L
Posiziona il menu di scelta rapida in modo che il lato destro sia allineato alla coordinata specificata dal parametro x .
 

Usare uno dei flag seguenti per specificare il modo in cui la funzione posiziona verticalmente il menu di scelta rapida.

Valore Significato
TPM_BOTTOMALIGN
0x0020L
Posiziona il menu di scelta rapida in modo che il lato inferiore sia allineato alla coordinata specificata dal parametro y .
TPM_TOPALIGN
0x0000L
Posiziona il menu di scelta rapida in modo che il lato superiore sia allineato alla coordinata specificata dal parametro y .
TPM_VCENTERALIGN
0x0010L
Centra il menu di scelta rapida verticalmente rispetto alla coordinata specificata dal parametro y .
 

Usare i flag seguenti per controllare l'individuazione della selezione utente senza dover configurare una finestra padre per il menu.

Valore Significato
TPM_NONOTIFY
0x0080L
La funzione non invia messaggi di notifica quando l'utente fa clic su una voce di menu.
TPM_RETURNCMD
0x0100L
La funzione restituisce l'identificatore della voce di menu della selezione dell'utente nel valore restituito.
 

Usare uno dei flag seguenti per specificare quale pulsante del mouse tiene traccia del menu di scelta rapida.

Valore Significato
TPM_LEFTBUTTON
0x0000L
L'utente può selezionare le voci di menu con solo il pulsante sinistro del mouse.
TPM_RIGHTBUTTON
0x0002L
L'utente può selezionare le voci di menu con i pulsanti del mouse sinistro e destro.
 

Usare qualsiasi combinazione ragionevole dei flag seguenti per modificare l'animazione di un menu. Ad esempio, selezionando un flag orizzontale e un flag verticale, è possibile ottenere un'animazione diagonale.

Valore Significato
TPM_HORNEGANIMATION
0x0800L
Anima il menu da destra a sinistra.
TPM_HORPOSANIMATION
0x0400L
Anima il menu da sinistra a destra.
TPM_NOANIMATION
0x4000L
Visualizza il menu senza animazione.
TPM_VERNEGANIMATION
0x2000L
Anima il menu dal basso verso l'alto.
TPM_VERPOSANIMATION
0x1000L
Anima il menu dall'alto verso il basso.
 

Per qualsiasi animazione, la funzione SystemParametersInfo deve impostare SPI_SETMENUANIMATION. Inoltre, tutti i flag di TPM_*ANIMATION, ad eccezione di TPM_NOANIMATION, vengono ignorati se l'animazione di fade del menu è attiva. Per altre informazioni, vedere il flag SPI_GETMENUFADE in SystemParametersInfo.

Usare il flag TPM_RECURSE per visualizzare un menu quando è già visualizzato un altro menu. Questo è destinato a supportare i menu di scelta rapida all'interno di un menu.

Per il layout di testo da destra a sinistra, usare TPM_LAYOUTRTL. Per impostazione predefinita, il layout di testo è a sinistra a destra.

[in] x

Tipo: int

Posizione orizzontale del menu di scelta rapida, nelle coordinate dello schermo.

[in] y

Tipo: int

Posizione verticale del menu di scelta rapida, nelle coordinate dello schermo.

[in] nReserved

Tipo: int

Riservati; deve essere zero.

[in] hWnd

Tipo: HWND

Handle alla finestra che possiede il menu di scelta rapida. Questa finestra riceve tutti i messaggi dal menu. La finestra non riceve un messaggio WM_COMMAND dal menu finché la funzione non viene restituita. Se si specifica TPM_NONOTIFY nel parametro uFlags , la funzione non invia messaggi alla finestra identificata da hWnd. Tuttavia, è comunque necessario passare un handle di finestra in hWnd. Può essere qualsiasi handle di finestra dall'applicazione.

[in, optional] prcRect

Tipo: const RECT*

Ignorato.

Valore restituito

Tipo: BOOL

Se si specifica TPM_RETURNCMD nel parametro uFlags , il valore restituito è l'identificatore della voce di menu dell'elemento selezionato dall'utente. Se l'utente annulla il menu senza effettuare una selezione o se si verifica un errore, il valore restituito è zero.

Se non si specifica TPM_RETURNCMD nel parametro uFlags , il valore restituito è diverso da zero se la funzione riesce e zero se ha esito negativo. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Chiamare GetSystemMetrics con SM_MENUDROPALIGNMENT per determinare il flag di allineamento orizzontale corretto (TPM_LEFTALIGN o TPM_RIGHTALIGN) e/o il flag di direzione dell'animazione orizzontale (TPM_HORPOSANIMATION o TPM_HORNEGANIMATION) da passare a TrackPopupMenu o TrackPopupMenuEx. Questo è essenziale per creare un'esperienza utente ottimale, soprattutto quando si sviluppano applicazioni Microsoft Tablet PC.

Per specificare un'area dello schermo che il menu non deve sovrapporsi, usare la funzione TrackPopupMenuEx

Per visualizzare un menu di scelta rapida per un'icona di notifica, la finestra corrente deve essere la finestra in primo piano prima che l'applicazione chiami TrackPopupMenu o TrackPopupMenuEx. In caso contrario, il menu non scompare quando l'utente fa clic all'esterno del menu o alla finestra che ha creato il menu (se è visibile). Se la finestra corrente è una finestra figlio, è necessario impostare la finestra padre (primo livello) come finestra di primo piano.

Tuttavia, quando la finestra corrente è la finestra in primo piano, la seconda volta che questo menu viene visualizzato, viene visualizzato e quindi scompare immediatamente. Per correggere questo problema, è necessario forzare un passaggio di attività all'applicazione denominata TrackPopupMenu. Questa operazione viene eseguita pubblicando un messaggio benigno nella finestra o nel thread, come illustrato nell'esempio di codice seguente:


   SetForegroundWindow(hDlg);

   // Display the menu
   TrackPopupMenu(   hSubMenu,
                     TPM_RIGHTBUTTON,
                     pt.x,
                     pt.y,
                     0,
                     hDlg,
                     NULL);

   PostMessage(hDlg, WM_NULL, 0, 0);
 

Esempio

Per un esempio, vedere Visualizzazione di un menu di scelta rapida.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-menu-l1-1-0 (introdotto in Windows 8)

Vedi anche

Informazioni concettuali

CreatePopupMenu

GetSubMenu

Menu

Riferimento

TrackPopupMenuEx

WM_COMMAND