Fonction TrackPopupMenu (winuser.h)
Affiche un menu contextuel à l’emplacement spécifié et effectue le suivi de la sélection des éléments dans le menu. Le menu contextuel peut apparaître n’importe où sur l’écran.
Syntaxe
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
);
Paramètres
[in] hMenu
Type : HMENU
Poignée du menu contextuel à afficher. Le handle peut être obtenu en appelant CreatePopupMenu pour créer un nouveau menu contextuel, ou en appelant GetSubMenu pour récupérer un handle dans un sous-menu associé à un élément de menu existant.
[in] uFlags
Type : UINT
Utilisez zéro de ces indicateurs pour spécifier les options de fonction.
Utilisez l’un des indicateurs suivants pour spécifier la façon dont la fonction positionne le menu contextuel horizontalement.
Utilisez l’un des indicateurs suivants pour spécifier la façon dont la fonction positionne le menu contextuel verticalement.
Utilisez les indicateurs suivants pour contrôler la découverte de la sélection de l’utilisateur sans avoir à configurer une fenêtre parente pour le menu.
Utilisez l’un des indicateurs suivants pour spécifier le bouton de souris suivi par le menu contextuel.
Utilisez toute combinaison raisonnable des indicateurs suivants pour modifier l’animation d’un menu. Par exemple, en sélectionnant un indicateur horizontal et un indicateur vertical, vous pouvez obtenir une animation diagonale.
Pour qu’une animation se produise, la fonction SystemParametersInfo doit définir SPI_SETMENUANIMATION. En outre, tous les indicateurs TPM_*ANIMATION, à l’exception de TPM_NOANIMATION, sont ignorés si l’animation de fondu de menu est activée. Pour plus d’informations, consultez l’indicateur SPI_GETMENUFADE dans SystemParametersInfo.
Utilisez l’indicateur TPM_RECURSE pour afficher un menu lorsqu’un autre menu est déjà affiché. Cela est destiné à prendre en charge les menus contextuels dans un menu.
Pour la disposition de texte de droite à gauche, utilisez TPM_LAYOUTRTL. Par défaut, la disposition du texte est de gauche à droite.
[in] x
Type : int
Emplacement horizontal du menu contextuel, dans les coordonnées de l’écran.
[in] y
Type : int
Emplacement vertical du menu contextuel, dans les coordonnées de l’écran.
[in] nReserved
Type : int
Réservés au; doit être égal à zéro.
[in] hWnd
Type : HWND
Handle de la fenêtre qui possède le menu contextuel. Cette fenêtre reçoit tous les messages du menu. La fenêtre ne reçoit pas de message WM_COMMAND du menu tant que la fonction n’est pas retournée. Si vous spécifiez TPM_NONOTIFY dans le paramètre uFlags , la fonction n’envoie pas de messages à la fenêtre identifiée par hWnd. Toutefois, vous devez toujours passer un handle de fenêtre dans hWnd. Il peut s’agir de n’importe quel handle de fenêtre de votre application.
[in, optional] prcRect
Type : const RECT*
Ignoré.
Valeur retournée
Type : BOOL
Si vous spécifiez TPM_RETURNCMD dans le paramètre uFlags , la valeur renvoyée est l’identificateur d’élément de menu de l’élément sélectionné par l’utilisateur. Si l’utilisateur annule le menu sans effectuer de sélection, ou si une erreur se produit, la valeur de retour est zéro.
Si vous ne spécifiez pas TPM_RETURNCMD dans le paramètre uFlags , la valeur de retour est différente de zéro si la fonction réussit et zéro si elle échoue. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Appelez GetSystemMetrics avec SM_MENUDROPALIGNMENT pour déterminer l’indicateur d’alignement horizontal correct (TPM_LEFTALIGN ou TPM_RIGHTALIGN) et/ou l’indicateur de direction de l’animation horizontale (TPM_HORPOSANIMATION ou TPM_HORNEGANIMATION) à passer à TrackPopupMenu ou TrackPopupMenuEx. Cela est essentiel pour créer une expérience utilisateur optimale, en particulier lors du développement d’applications Microsoft Tablet PC.
Pour spécifier une zone de l’écran que le menu ne doit pas chevaucher, utilisez la fonction TrackPopupMenuEx
Pour afficher un menu contextuel pour une icône de notification, la fenêtre active doit être la fenêtre de premier plan avant que l’application appelle TrackPopupMenu ou TrackPopupMenuEx. Sinon, le menu ne disparaît pas lorsque l’utilisateur clique en dehors du menu ou de la fenêtre qui a créé le menu (s’il est visible). Si la fenêtre active est une fenêtre enfant, vous devez définir la fenêtre parente (de niveau supérieur) comme fenêtre de premier plan.
Toutefois, lorsque la fenêtre active est la fenêtre de premier plan, la deuxième fois que ce menu s’affiche, il s’affiche, puis disparaît immédiatement. Pour corriger ce problème, vous devez forcer le basculement d’une tâche vers l’application qui a appelé TrackPopupMenu. Pour ce faire, publiez un message bénin dans la fenêtre ou le thread, comme illustré dans l’exemple de code suivant :
SetForegroundWindow(hDlg);
// Display the menu
TrackPopupMenu( hSubMenu,
TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
hDlg,
NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
Exemples
Pour obtenir un exemple, consultez Affichage d’un menu contextuel.
Spécifications
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | winuser.h (inclure Windows.h) |
Bibliothèque | User32.lib |
DLL | User32.dll |
Ensemble d’API | ext-ms-win-ntuser-menu-l1-1-0 (introduit dans Windows 8) |
Voir aussi
Conceptuel
Référence