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.
Usare uno dei flag seguenti per specificare il modo in cui la funzione posiziona verticalmente il menu di scelta rapida.
Usare i flag seguenti per controllare l'individuazione della selezione utente senza dover configurare una finestra padre per il menu.
Usare uno dei flag seguenti per specificare quale pulsante del mouse tiene traccia del menu di scelta rapida.
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.
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
Riferimento