TrackPopupMenuEx, fonction (winuser.h)

Affiche un menu contextuel à l’emplacement spécifié et effectue le suivi de la sélection des éléments dans le menu contextuel. Le menu contextuel peut apparaître n’importe où sur l’écran.

Syntaxe

BOOL TrackPopupMenuEx(
  [in]           HMENU       hMenu,
  [in]           UINT        uFlags,
  [in]           int         x,
  [in]           int         y,
  [in]           HWND        hwnd,
  [in, optional] LPTPMPARAMS lptpm
);

Paramètres

[in] hMenu

Type : HMENU

Handle vers le menu contextuel à afficher. Ce handle peut être obtenu en appelant la fonction CreatePopupMenu pour créer un menu contextuel ou en appelant la fonction GetSubMenu pour récupérer un handle dans un sous-menu associé à un élément de menu existant.

[in] uFlags

Type : UINT

Spécifie les options de fonction.

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

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é sur la coordonnée spécifiée par le paramètre x .
TPM_RIGHTALIGN
0x0008L
Positionne le menu contextuel afin 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 verticalement le menu contextuel.

Valeur Signification
TPM_BOTTOMALIGN
0x0020L
Positionne le menu contextuel de sorte 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 afin 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 n’importe quelle 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 des 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é. Ceci est destiné à prendre en charge les menus contextuels dans un menu.

Utilisez l’un des indicateurs suivants pour spécifier s’il faut prendre en charge l’alignement horizontal ou vertical.

Valeur Signification
TPM_HORIZONTAL
0x0000L
Si le menu ne peut pas être affiché à l’emplacement spécifié sans chevaucher le rectangle exclu, le système tente de prendre en charge l’alignement horizontal demandé avant l’alignement vertical demandé.
TPM_VERTICAL
0x0040L
Si le menu ne peut pas être affiché à l’emplacement spécifié sans chevaucher le rectangle exclu, le système tente de prendre en charge l’alignement vertical demandé avant l’alignement horizontal demandé.
 

Le rectangle exclu est une partie de l’écran que le menu ne doit pas chevaucher ; il est spécifié par le paramètre lptpm .

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, en coordonnées d’écran.

[in] y

Type : int

Emplacement vertical du menu contextuel, en coordonnées d’écran.

[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 fuFlags , la fonction n’envoie pas de messages à la fenêtre identifiée par hwnd. Toutefois, vous devez toujours passer une poignée de fenêtre dans hwnd. Il peut s’agir de n’importe quel handle de fenêtre de votre application.

[in, optional] lptpm

Type : LPTPMPARAMS

Pointeur vers une structure TPMPARAMS qui spécifie une zone de l’écran que le menu ne doit pas chevaucher. Ce paramètre peut être NULL.

Valeur retournée

Type : BOOL

Si vous spécifiez TPM_RETURNCMD dans le paramètre fuFlags , 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 fuFlags , la valeur de retour est différente de zéro si la fonction réussit et de 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 (TPM_LEFTALIGN ou TPM_RIGHTALIGN) et/ou l’indicateur de direction d’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 afficher un menu contextuel d’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.

Configuration requise

Condition requise Valeur
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-1 (introduit dans Windows 8.1)

Voir aussi

Conceptuel

CreatePopupMenu

GetSubMenu

Menus

Référence

TPMPARAMS

WM_COMMAND