Méthode IContextMenu ::QueryContextMenu (shobjidl_core.h)

Ajoute des commandes à un menu contextuel.

Syntaxe

HRESULT QueryContextMenu(
  HMENU hmenu,
  UINT  indexMenu,
  UINT  idCmdFirst,
  UINT  idCmdLast,
  UINT  uFlags
);

Paramètres

hmenu

Type : HMENU

Poignée du menu contextuel. Le gestionnaire doit spécifier ce handle lors de l’ajout d’éléments de menu.

indexMenu

Type : UINT

Position de base zéro à laquelle insérer le premier nouvel élément de menu.

idCmdFirst

Type : UINT

Valeur minimale que le gestionnaire peut spécifier pour un identificateur d’élément de menu.

idCmdLast

Type : UINT

Valeur maximale que le gestionnaire peut spécifier pour un identificateur d’élément de menu.

uFlags

Type : UINT

Indicateurs facultatifs qui spécifient la façon dont le menu contextuel peut être modifié. Ce paramètre peut être défini sur une combinaison des valeurs suivantes. Les autres bits du mot d’ordre inférieur sont réservés par le système. Le mot d’ordre élevé peut être utilisé pour les communications spécifiques au contexte. La valeur CMF_RESERVED peut être utilisée pour masquer le mot de faible ordre.

CMF_NORMAL (0x00000000)

0x00000000. Indique un fonctionnement normal. Une extension de menu contextuel, une extension d’espace de noms ou un gestionnaire de glisser-déplacer peut ajouter tous les éléments de menu.

CMF_DEFAULTONLY (0x00000001)

0x00000001. L’utilisateur active l’action par défaut, généralement en double-cliquant. Cet indicateur fournit un conseil pour que l’extension de menu contextuel n’ajoute rien si elle ne modifie pas l’élément par défaut dans le menu. Une extension de menu contextuel ou un gestionnaire de glisser-déplacer ne doit pas ajouter d’éléments de menu si cette valeur est spécifiée. Une extension d’espace de noms doit au maximum ajouter uniquement l’élément par défaut.

CMF_VERBSONLY (0x00000002)

0x00000002. Le menu contextuel est celui d’un fichier de raccourcis (normalement, un fichier .lnk). Les gestionnaires de menus contextuels doivent ignorer cette valeur.

CMF_EXPLORE (0x00000004)

0x00000004. La fenêtre d’arborescence Windows Explorer est présente.

CMF_NOVERBS (0x00000008)

0x00000008. Cet indicateur est défini pour les éléments affichés dans le menu Envoyer à . Les gestionnaires de menus contextuels doivent ignorer cette valeur.

CMF_CANRENAME (0x00000010)

0x00000010. L’application appelante prend en charge le renommage des éléments. Un menu contextuel ou un gestionnaire de glisser-déplacer doit ignorer cet indicateur. Une extension d’espace de noms doit ajouter un élément Renommer au menu, le cas échéant.

CMF_NODEFAULT (0x00000020)

0x00000020. Aucun élément du menu n’a été défini comme élément par défaut. Un gestionnaire de glisser-déplacer doit ignorer cet indicateur. Une extension d’espace de noms ne doit définir aucun des éléments de menu comme valeur par défaut.

CMF_INCLUDESTATIC (0x00000040)

Cette valeur n’est pas disponible.

Windows Server 2003 et Windows XP : 0x00000040. Un menu statique est en cours de construction. Seul le navigateur doit utiliser cet indicateur ; toutes les autres extensions de menu contextuel doivent l’ignorer.

CMF_ITEMMENU (0x00000080)

0x00000080. L’application appelante appelle un menu contextuel sur un élément de la vue (par opposition à l’arrière-plan de l’affichage).

Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_EXTENDEDVERBS (0x00000100)

0x00000100. L’application appelante souhaite des verbes étendus. Les verbes normaux s’affichent lorsque l’utilisateur clique avec le bouton droit sur un objet. Pour afficher des verbes étendus, l’utilisateur doit cliquer avec le bouton droit tout en appuyant sur la touche Maj.

CMF_DISABLEDVERBS (0x00000200)

0x00000200. L’application appelante a l’intention d’appeler des verbes qui sont désactivés, tels que les menus hérités.

Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_ASYNCVERBSTATE (0x00000400)

0x00000400. L’état du verbe peut être évalué de manière asynchrone.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_OPTIMIZEFORINVOKE (0x00000800)

0x00000800. Informe les gestionnaires de menus contextuels qui ne prennent pas en charge l’appel d’un verbe via un nom de verbe canonique pour contourner IContextMenu ::QueryContextMenu dans leur implémentation.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_SYNCCASCADEMENU (0x00001000)

0x00001000. Remplir les sous-menus de manière synchrone.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_DONOTPICKDEFAULT (0x00002000)

0x00002000. Lorsqu’aucun verbe n’est spécifié explicitement, n’utilisez pas de verbe par défaut à sa place.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cette valeur n’est pas disponible.

CMF_RESERVED (0xffff0000)

0xffff0000. Cet indicateur est un masque de bits qui spécifie tous les bits qui ne doivent pas être utilisés. Il doit être utilisé uniquement comme masque. Ne transmettez pas cette valeur en tant que valeur de paramètre.

Valeur retournée

Type : HRESULT

En cas de réussite, retourne une valeur HRESULT dont la valeur de gravité est définie sur SEVERITY_SUCCESS et sa valeur de code définie sur le décalage du plus grand identificateur de commande affecté, plus un. Par exemple, si idCmdFirst a la valeur 5 et que vous ajoutez trois éléments au menu avec des identificateurs de commande de 5, 7 et 8, la valeur de retour doit être MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Sinon, il retourne une valeur d’erreur COM.

Remarques

Cette méthode doit appeler InsertMenu ou InsertMenuItem pour insérer ses éléments de menu dans le menu spécifié par hmenu. Le paramètre indexMenu contient l’index à utiliser pour le premier élément de menu. L’identificateur de chaque élément de menu doit se trouver dans la plage définie par idCmdFirst et idCmdLast.

Une pratique courante consiste à définir le premier identificateur de commande sur idCmdFirst (décalage de zéro) et à incrémenter le décalage de chaque commande supplémentaire d’un. Cette pratique garantit que vous ne dépassez pas idCmdLast et conserve la plage d’identificateurs qui peuvent être utilisés par d’autres gestionnaires. Stockez les décalages pour référence, car ils peuvent être utilisés pour identifier la commande dans les appels suivants à IContextMenu ::GetCommandString et IContextMenu ::InvokeCommand.

Si l’interpréteur de commandes appelle par la suite un autre gestionnaire de menu contextuel, il utilise la valeur de code du HRESULT retourné pour définir idCmdFirst lorsqu’il appelle la méthode QueryContextMenu de ce gestionnaire.

Lorsqu’un gestionnaire de menu contextuel ajoute un élément de menu contextuel, il doit utiliser IContextMenu ::QueryContextMenu pour ajouter au moins un élément à ce menu pour que le message WM_INITMENUPOPUP soit transféré.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête shobjidl_core.h (incluez Shobjidl.h)
DLL Shell32.dll (version 4.0 ou ultérieure)