Partager via


CONTEXTMENUITEM, structure (mmc.h)

La structure CONTEXTMENUITEM est passée à la méthode IContextMenuCallback ::AddItem ou à la méthode IContextMenuProvider ::AddItem (héritée de IContextMenuCallback) pour définir un nouvel élément de menu, un sous-menu ou un point d’insertion. Le menu contextuel est généré à partir de la racine vers le bas, chaque nouvel élément allant à la fin du sous-menu ou du point d’insertion où il est inséré.

Syntaxe

typedef struct _CONTEXTMENUITEM {
  LPWSTR strName;
  LPWSTR strStatusBarText;
  LONG   lCommandID;
  LONG   lInsertionPointID;
  LONG   fFlags;
  LONG   fSpecialFlags;
} CONTEXTMENUITEM;

Membres

strName

Pointeur vers une chaîne terminée par null qui contient le nom de l’élément de menu ou du sous-menu. Ce membre ne peut pas être NULL à l’exception d’un séparateur ou d’un point d’insertion.

strStatusBarText

Pointeur vers une chaîne terminée par null qui contient le texte affiché dans la barre de status lorsque cet élément est mis en surbrillance. Ce membre peut être NULL.

lCommandID

Valeur qui spécifie l’identificateur de commande pour les éléments de menu. Si cet élément de menu est ajouté par IExtendContextMenu ::AddMenuItems , puis sélectionné, il s’agit de l’ID de commande qui est repassé à IExtendContextMenu ::Command. Si cet élément de menu est ajouté par l’interface IContextMenuProvider , puis sélectionné, il s’agit de l’ID de commande qui est repassé à pISelected par IContextMenuProvider ::ShowContextMenu. S’il s’agit d’un point d’insertion (CCM_SPECIAL_INSERTION_POINT est défini dans fSpecialFlags) ou d’un sous-menu (MF_POPUP est défini dans fFlags), utilisez lCommandID dans les appels suivants en tant que lInsertionPointID (pour plus d’informations, voir la liste suivante). Lisez attentivement la discussion suivante, car des bits spécifiques dans le nouvel ID de point d’insertion doivent être activés et d’autres doivent être désactivés.

Certains bits de l’ID de commande nécessitent une gestion spéciale pour les éléments qui ne sont pas des points d’insertion ou des sous-menus.

CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000

Les éléments autres que les points d’insertion et les sous-menus ne peuvent pas être ajoutés lorsque ces bits sont définis.

Certains bits de l’ID du point d’insertion nécessitent une gestion spéciale pour les éléments qui sont des points d’insertion (fSpecialFlags et CCM_SPECIAL_INSERTION_POINT) ou des sous-menus (fFlags et MF_POPUP).

CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000

Comportement spécial. Les composants logiciels enfichables peuvent utiliser les autres bits en fonction des besoins.

CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000

Ces points d’insertion et sous-menus sont partagés entre le créateur du menu contextuel, l’extension principale et l’extension tierce. Les éléments ajoutés à un point d’insertion partagé ou sous-menu sont disponibles pour le créateur du menu contextuel, de l’extension principale et de l’extension tierce.

Si ce bit n’est pas défini, l’interface IContextMenuProvider et chaque extension peuvent utiliser le même ID. Chaque ID fait référence à un point d’insertion ou sous-menu différent.

Seul le créateur du menu contextuel et le composant logiciel enfichable principal peuvent créer des points d’insertion ou des sous-menus partagés.

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000

Ce bit doit être défini pour les points d’insertion partagés et les sous-menus créés par le composant logiciel enfichable principal, et non pour ceux créés par le créateur du menu contextuel. Cela permet d’éviter les conflits d’ID entre les deux sources de points d’insertion et de sous-menus partagés.

CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000

Autorisez le composant logiciel enfichable principal à ajouter des éléments à un point d’insertion ou sous-menu partagé.

CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000

Autoriser les composants logiciels enfichables d’extension à ajouter des éléments à un point d’insertion ou sous-menu partagé.

CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000

Les points d’insertion ou les sous-menus ne peuvent pas être ajoutés avec l’un de ces bits défini.

lInsertionPointID

Valeur qui spécifie où, dans le menu contextuel, le nouvel élément doit être ajouté. Les composants logiciels enfichables peuvent uniquement ajouter des éléments aux points d’insertion créés par le créateur du menu ou le composant logiciel enfichable principal. Voici les points d’insertion créés par MMC dans les menus contextuels par défaut pour les éléments du volet étendue et du volet de résultats de l’affichage liste :

0 (zéro)

Un lInsertionPointID de zéro fait référence au menu racine de ce menu contextuel. Zéro peut être utilisé indifféremment avec CCM_INSERTIONPOINTID_ROOT_MENU. N’oubliez pas que seule l’interface IContextMenuProvider peut ajouter des éléments directement au menu racine. Les extensions peuvent uniquement ajouter des éléments aux points d’insertion et sous-menus ajoutés au menu racine par IContextMenuProvider ou par MMC.

CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000

Le composant logiciel enfichable principal peut utiliser ce point d’insertion pour ajouter des éléments en haut du menu contextuel main.

CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001

Le composant logiciel enfichable principal peut utiliser ce point d’insertion pour ajouter des éléments en haut du sous-menu Nouveau. Le sous-menu Nouveau est disponible dans les menus contextuels du volet d’étendue et du volet de résultats.

CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002

Le composant logiciel enfichable principal peut utiliser ce point d’insertion pour ajouter des éléments en haut du sous-menu Toutes les tâches. Le sous-menu Toutes les tâches est disponible dans les menus contextuels du volet d’étendue et du volet de résultats.

CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003

Le composant logiciel enfichable principal peut utiliser ce point d’insertion pour ajouter des éléments au menu déroulant Affichage . Si l’utilisateur clique sur le menu Affichage dans la barre d’outils, ce point d’insertion est présent, mais les points d’insertion Nouveau et Toutes les tâches n’apparaissent pas.

CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001

Les composants logiciels enfichables d’extension peuvent utiliser ce point d’insertion pour ajouter des éléments au bas du sous-menu Nouveau. Le sous-menu Nouveau est uniquement présent pour les menus contextuels du volet d’étendue et non pour les menus contextuels du volet de résultats.

CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002

Les composants logiciels enfichables d’extension peuvent utiliser ce point d’insertion pour ajouter des éléments au bas du sous-menu Toutes les tâches.

CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000

L’interface IContextMenuProvider peut utiliser ce point d’insertion pour ajouter des éléments au menu racine.

Ni les extensions principales ni les extensions tierces ne peuvent ajouter d’éléments au menu racine, sauf via des points d’insertion ajoutés par IContextMenuProvider.

fFlags

Valeur qui spécifie un ou plusieurs des indicateurs de style suivants :

MF_POPUP

Valeur qui spécifie qu’il s’agit d’un sous-menu dans le menu contextuel. Les éléments de menu, les points d’insertion et d’autres sous-menus peuvent être ajoutés à ce sous-menu à l’aide de son lCommandID comme lInsertionPointID.

MF_BITMAP

MF_OWNERDRAW

Ces indicateurs ne sont pas pris en charge et IContextMenuCallback ::AddItem retourne E_INVALIDARG.

MF_SEPARATOR

Dessine une ligne de séparation horizontale.

Seule l’interface IContextMenuProvider peut ajouter des éléments de menu avec MF_SEPARATOR défini.

Les indicateurs suivants fonctionnent de la même façon que dans l’API Windows :

MF_CHECKED

Sélectionne l’élément de menu.

MF_DISABLED

Désactive l’élément de menu afin qu’il ne puisse pas être sélectionné, mais l’indicateur ne le grise pas.

MF_ENABLED

Active l’élément de menu afin qu’il puisse être sélectionné, en le restaurant à partir d’un état grisé.

MF_GRAYED

Désactive l’élément de menu en le grisant afin qu’il ne puisse pas être sélectionné.

MF_MENUBARBREAK

Fonctionne de la même façon que l’indicateur MF_MENUBREAK pour une barre de menus. Pour un menu déroulant, un sous-menu ou un menu contextuel, la nouvelle colonne est séparée de l’ancienne colonne par une ligne verticale.

MF_MENUBREAK

Places l’élément sur une nouvelle ligne (pour une barre de menus) ou dans une nouvelle colonne (pour un menu déroulant, un sous-menu ou un menu contextuel) sans séparer les colonnes.

MF_UNCHECKED

Ne sélectionne pas l’élément (par défaut).

Les groupes d’indicateurs suivants ne peuvent pas être utilisés ensemble :

  • MF_DISABLED, MF_ENABLED et MF_GRAYED
  • MF_MENUBARBREAK et MF_MENUBREAK
  • MF_CHECKED et MF_UNCHECKED

fSpecialFlags

Valeur qui spécifie un ou plusieurs des indicateurs suivants :

CCM_SPECIAL_SEPARATOR = 0x0001

Ignorez tous les autres paramètres à l’exception de lInsertionPointID. Ajoutez un séparateur à la fin du menu ou au point d’insertion spécifié. Les séparateurs placés en haut ou en bas d’un menu ou d’un sous-menu ne s’affichent pas. Les séparateurs sans élément de menu seront réduits en un seul séparateur.

Seule l’interface IContextMenuProvider peut ajouter des séparateurs, spéciaux ou autres.

CCM_SPECIAL_SUBMENU = 0x0002

Si ce sous-menu est vide, il sera grisé et désactivé. Cette option n’est valide que pour les éléments MF_POPUP .

CCM_SPECIAL_DEFAULT_ITEM = 0x0004

Élément de menu par défaut. Si plusieurs éléments de menu spécifient cet indicateur, le dernier élément de chaque sous-menu est prioritaire.

CCM_SPECIAL_INSERTION_POINT = 0x0008

Ignorez tous les autres paramètres à l’exception de lCommandID et lInsertionPointID. Cela crée un nouveau point d’insertion à la fin du point d’insertion ou du sous-menu identifié par lInsertionPointID.

Les appels suivants peuvent utiliser le paramètre lCommandID de cet appel comme lInsertionPointID et insérer leurs propres éléments de menu, sous-menus ou points d’insertion à ce stade du menu.

CCM_SPECIAL_TESTONLY = 0x0010

Validez les paramètres de l’élément, mais n’ajoutez pas l’élément de menu. Retourne le code de résultat qui indique si l’ajout aurait réussi.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Serveur minimal pris en charge Windows Server 2008
En-tête mmc.h

Voir aussi

IContextMenuCallback

IContextMenuProvider

IExtendContextMenu

Utilisation des menus contextuels