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) |