structure CONTEXTMENUITEM2 (mmc.h)
La structure CONTEXTMENUITEM2 est introduite dans MMC 2.0.
La structure CONTEXTMENUITEM2 est passée à la méthode IContextMenuCallback2 ::AddItem ou à la méthode IContextMenuProvider ::AddItem (héritée de IContextMenuCallback) pour définir un nouvel élément de menu, sous-menu ou 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ù le nouvel élément est inséré. La structure CONTEXTMENUITEM2 remplace la structure CONTEXTMENUITEM (autre que le membre strLanguageIndependentName , tous les membres de CONTEXTMENUITEM2 sont dans CONTEXTMENUITEM).
Syntaxe
typedef struct _CONTEXTMENUITEM2 {
LPWSTR strName;
LPWSTR strStatusBarText;
LONG lCommandID;
LONG lInsertionPointID;
LONG fFlags;
LONG fSpecialFlags;
LPWSTR strLanguageIndependentName;
} CONTEXTMENUITEM2;
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 avoir la valeur 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 avoir la valeur NULL.
lCommandID
Valeur qui spécifie l’identificateur de commande pour les éléments de menu. Si l’élément de menu est ajouté par IExtendContextMenu ::AddMenuItems , puis sélectionné, lCommandID est le paramètre ID de commande qui est transmis à 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 passé à 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, consultez 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.
Les bits suivants dans 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.
Les bits suivants de l’ID de 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 à un 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.
Seuls le créateur du menu contextuel et le composant logiciel enfichable principal peuvent créer des points d’insertion partagés ou des sous-menus.
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 évite les conflits d’ID entre les deux sources de points d’insertion partagés et les sous-menus.
CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY (0x20000000)
Permet au composant logiciel enfichable principal d’ajouter des éléments à un point d’insertion partagé ou à un sous-menu.
CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY (0x10000000)
Permet aux composants logiciels enfichables d’extension d’ajouter des éléments à un point d’insertion partagé ou à un sous-menu.
CCM_INSERTIONPOINTID_MASK_RESERVED (0x0FFF0000)
Les points d’insertion ou sous-menus ne peuvent pas être ajoutés avec ce jeu de valeurs.
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 de 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 d’étendue et du volet de résultats de l’affichage de liste :
0 (zéro)
Un lInsertionPointID de 0 fait référence au menu racine de ce menu contextuel. La valeur 0 peut être utilisée de manière interchangeable avec CCM_INSERTIONPOINTID_ROOT_MENU. N’oubliez pas que seul IContextMenuProvider est autorisé à 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 nouveau sous-menu. Le nouveau sous-menu est disponible dans les menus contextuels des volets d’étendue et de résultat.
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 des volets d’étendue et de résultat.
CCM_INSERTIONPOINTID_PRIMARY_VIEW (0xA0000003)
Le composant logiciel enfichable principal peut utiliser ce point d’insertion pour ajouter des éléments au menu Affichage . Si l’utilisateur clique sur le menu déroulant Affichage de la barre d’outils, ce point d’insertion est présent, mais les points d’insertion Nouvelle 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 n’est présent que pour les menus contextuels dans le volet d’étendue et non pour les menus contextuels dans le 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)
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
L’élément créé est un sous-menu dans le menu contextuel. Des éléments de menu, des points d’insertion et d’autres sous-menus peuvent être ajoutés au sous-menu créé ; le nouvel élément de menu, sous-menu ou point d’insertion doit utiliser le membre lCommandID du sous-menu créé comme valeur de membre lInsertionPointID .
MF_BITMAP
Ces indicateurs ne sont pas pris en charge ; IContextMenuCallback2 ::AddItem retourne E_INVALIDARG.
MF_OWNERDRAW
Ces indicateurs ne sont pas pris en charge ; IContextMenuCallback2 ::AddItem retourne E_INVALIDARG.
MF_SEPARATOR
Dessine une ligne de séparation horizontale.
Seul IContextMenuProvider peut ajouter des éléments de menu avec MF_SEPARATOR défini.
Les indicateurs suivants fonctionnent de la même manière 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 réduit pas l’élément de menu.
MF_ENABLED
Active l’élément de menu afin qu’il puisse être sélectionné, en le restaurant à partir de son état grisé.
MF_GRAYED
Désactive l’élément de menu, l’assombrissant de sorte qu’il ne puisse pas être sélectionné.
MF_MENUBARBREAK
Fonctionne comme l’indicateur MF_MENUBREAK pour une barre de menus. Pour un menu déroulant, un sous-menu ou un menu contextuel, une ligne verticale sépare la nouvelle colonne de l’ancienne.
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éments de menu sont réduits en un seul séparateur.
Seul IContextMenuProvider peut ajouter des séparateurs, spéciaux ou autres.
CCM_SPECIAL_SUBMENU (0x0002)
Si ce sous-menu est vide, il apparaît grisé ; cela n’est valide que pour les éléments MF_POPUP .
CCM_SPECIAL_DEFAULT_ITEM (0x0004)
Il s’agit de l’é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. Cet indicateur crée un point d’insertion à la fin du point d’insertion ou du sous-menu identifié par lInsertionPointID. De nouveaux éléments de menu, sous-menu ou points d’insertion peuvent être ajoutés au point d’insertion créé ; le nouvel élément de menu, sous-menu ou point d’insertion doit utiliser le membre lCommandID du point d’insertion créé comme valeur de membre lInsertionPointID .
CCM_SPECIAL_TESTONLY = 0x0010
Validez les paramètres de l’élément, mais n’ajoutez pas l’élément de menu. Retourne un code de résultat qui indique si une opération d’ajout aurait réussi.
strLanguageIndependentName
Nom indépendant de la langue de l’élément de menu. Récupérez cette valeur dans les applications de modèle objet Automation MMC 2.0 en obtenant la propriété MenuItem.LanguageIndependentName . Le membre strLanguageIndependentName ne peut pas être NULL ou une chaîne vide, sauf si un séparateur ou un point d’insertion est ajouté ; sinon, la méthode IContextMenuCallback ::AddItem échoue avec E_INVALIDARG comme valeur de retour.
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 |