Partager via


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.

Valeur Signification
TPM_CENTERALIGN
0x0004L
Centre le menu contextuel horizontalement par rapport à la coordonnée spécifiée par le paramètre x .
TPM_LEFTALIGN
0x0000L
Positionne le menu contextuel de sorte que son côté gauche soit aligné avec la coordonnée spécifiée par le paramètre x .
TPM_RIGHTALIGN
0x0008L
Positionne le menu contextuel de sorte que son côté droit soit aligné sur la coordonnée spécifiée par le paramètre x .
 

Utilisez l’un des indicateurs suivants pour spécifier la façon dont la fonction positionne le menu contextuel verticalement.

Valeur Signification
TPM_BOTTOMALIGN
0x0020L
Positionne le menu contextuel afin que son côté inférieur soit aligné sur la coordonnée spécifiée par le paramètre y .
TPM_TOPALIGN
0x0000L
Positionne le menu contextuel de sorte que son côté supérieur soit aligné sur la coordonnée spécifiée par le paramètre y .
TPM_VCENTERALIGN
0x0010L
Centre le menu contextuel verticalement par rapport à la coordonnée spécifiée par le paramètre y .
 

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.

Valeur Signification
TPM_NONOTIFY
0x0080L
La fonction n’envoie pas de messages de notification lorsque l’utilisateur clique sur un élément de menu.
TPM_RETURNCMD
0x0100L
La fonction retourne l’identificateur d’élément de menu de la sélection de l’utilisateur dans la valeur de retour.
 

Utilisez l’un des indicateurs suivants pour spécifier le bouton de souris suivi par le menu contextuel.

Valeur Signification
TPM_LEFTBUTTON
0x0000L
L’utilisateur peut sélectionner des éléments de menu avec uniquement le bouton gauche de la souris.
TPM_RIGHTBUTTON
0x0002L
L’utilisateur peut sélectionner des éléments de menu à l’aide des boutons gauche et droit de la souris.
 

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.

Valeur Signification
TPM_HORNEGANIMATION
0x0800L
Anime le menu de droite à gauche.
TPM_HORPOSANIMATION
0x0400L
Anime le menu de gauche à droite.
TPM_NOANIMATION
0x4000L
Affiche le menu sans animation.
TPM_VERNEGANIMATION
0x2000L
Anime le menu de bas en haut.
TPM_VERPOSANIMATION
0x1000L
Anime le menu de haut en bas.
 

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

CreatePopupMenu

GetSubMenu

Menus

Référence

TrackPopupMenuEx

WM_COMMAND