Поделиться через


структура CONTEXTMENUITEM2 (mmc.h)

Структура CONTEXTMENUITEM2 представлена в MMC 2.0.

Структура CONTEXTMENUITEM2 передается методу IContextMenuCallback2::AddItem или методу IContextMenuProvider::AddItem (наследуемой от IContextMenuCallback) для определения нового элемента меню, подменю или точки вставки. Контекстное меню создается из корня вниз, при этом каждый новый элемент находится в конце подменю или в точке вставки, в которой вставляется новый элемент. Структура CONTEXTMENUITEM2 заменяет структуру CONTEXTMENUITEM (за исключением элемента strLanguageIndependentName , все члены CONTEXTMENUITEM2 находятся в CONTEXTMENUITEM).

Синтаксис

typedef struct _CONTEXTMENUITEM2 {
  LPWSTR strName;
  LPWSTR strStatusBarText;
  LONG   lCommandID;
  LONG   lInsertionPointID;
  LONG   fFlags;
  LONG   fSpecialFlags;
  LPWSTR strLanguageIndependentName;
} CONTEXTMENUITEM2;

Члены

strName

Указатель на строку, завершающуюся значением NULL, которая содержит имя пункта меню или подменю. Этот элемент не может иметь значение NULL , за исключением разделителя или точки вставки.

strStatusBarText

Указатель на строку, завершающуюся null, которая содержит текст, отображаемый в строке состояния при выделении этого элемента. Этот элемент может иметь значение NULL.

lCommandID

Значение типа , указывающее идентификатор команды для пунктов меню. Если элемент меню добавлен IExtendContextMenu::AddMenuItems , а затем выбран, lCommandID — это параметр идентификатора команды, который передается обратно в IExtendContextMenu::Command. Если этот пункт меню добавляется интерфейсом IContextMenuProvider , а затем выбран, это идентификатор команды, который передается обратно в pISelected с помощью IContextMenuProvider::ShowContextMenu. Если это точка вставки (CCM_SPECIAL_INSERTION_POINT задано в fSpecialFlags) или подменю (MF_POPUP задано в fFlags), используйте lCommandID в последующих вызовах как lInsertionPointID (дополнительные сведения см. в следующем списке). Внимательно прочтите следующее обсуждение, так как определенные биты в новом идентификаторе точки вставки должны быть включено, а другие должны быть отключены.

Следующие биты в идентификаторе команды требуют специальной обработки для элементов, которые не являются точками вставки или подменю.

CCM_COMMANDID_MASK_RESERVED (0xFFFF0000)

Элементы, отличные от точек вставки и подменю, нельзя добавлять, если заданы эти биты.

Следующие биты в идентификаторе точки вставки требуют специальной обработки для элементов, которые являются точками вставки (fSpecialFlags и CCM_SPECIAL_INSERTION_POINT) или подменю (fFlags и MF_POPUP).

CCM_INSERTIONPOINTID_MASK_SPECIAL (0xFFFF0000)

Особое поведение. Оснастки могут использовать другие биты по мере необходимости.

CCM_INSERTIONPOINTID_MASK_SHARED (0x80000000)

Эти точки вставки и подменю совместно используются создателем контекстного меню, основным расширением и сторонним расширением. Элементы, добавленные в общую точку вставки или вложенное меню, доступны создателю контекстного меню, основному расширению и стороннему расширению.

Если этот бит не задан, интерфейс IContextMenuProvider и каждое расширение могут использовать один и тот же идентификатор. Каждый идентификатор ссылается на другую точку вставки или подменю.

Создавать общие точки вставки или подменю могут только создатель контекстного меню и основная оснастка.

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY (0x40000000)

Этот бит должен быть задан для общих точек вставки и подменю, созданных основной оснасткой, а не для тех, которые были созданы создателем контекстного меню. Это предотвращает конфликты идентификаторов между двумя источниками общих точек вставки и подменю.

CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY (0x20000000)

Позволяет основной оснастке добавлять элементы в общую точку вставки или вложенное меню.

CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY (0x10000000)

Позволяет оснасткам расширения добавлять элементы в общую точку вставки или подменю.

CCM_INSERTIONPOINTID_MASK_RESERVED (0x0FFF0000)

Точки вставки или подменю нельзя добавить с этим набором значений.

lInsertionPointID

Значение типа , указывающее, куда в контекстном меню следует добавить новый элемент. Оснастки могут добавлять элементы только в точки вставки, созданные создателем меню или основной оснасткой. Ниже приведены точки вставки, созданные MMC в контекстных меню по умолчанию для элементов в области область и области результатов представления списка.

0 (ноль)

LInsertionPointID 0 относится к корневому меню для этого контекстного меню. Значение 0 можно использовать взаимозаменяемо с CCM_INSERTIONPOINTID_ROOT_MENU. Имейте в виду, что только IContextMenuProvider может добавлять элементы непосредственно в корневое меню. Расширения могут добавлять элементы только в точки вставки и подменю, добавленные в корневое меню IContextMenuProvider или MMC.

CCM_INSERTIONPOINTID_PRIMARY_TOP (0xA0000000)

Основная оснастка может использовать эту точку вставки для добавления элементов в верхнюю часть контекстного меню main.

CCM_INSERTIONPOINTID_PRIMARY_NEW (0xA0000001)

Основная оснастка может использовать эту точку вставки для добавления элементов в верхнюю часть подменю Создать . Подменю New (Создать) доступно в контекстных меню областей область и результатов.

CCM_INSERTIONPOINTID_PRIMARY_TASK (0xA0000002)

Основная оснастка может использовать эту точку вставки для добавления элементов в верхнюю часть подменю Все задачи. Вложенное меню Все задачи доступно в контекстных меню областей область и результатов.

CCM_INSERTIONPOINTID_PRIMARY_VIEW (0xA0000003)

Основная оснастка может использовать эту точку вставки для добавления элементов в меню Вид . Если пользователь щелкнет раскрывающееся меню Вид на панели инструментов, эта точка вставки будет отображаться, но точки вставки "Создать" и "Все задачи" не будут отображаться.

CCM_INSERTIONPOINTID_3RDPARTY_NEW (0x90000001)

Оснастки расширения могут использовать эту точку вставки для добавления элементов в нижнюю часть подменю Создать . Подменю Создать отображается только для контекстных меню в области область, а не для контекстных меню в области результатов.

CCM_INSERTIONPOINTID_3RDPARTY_TASK (0x90000002)

Оснастки расширения могут использовать эту точку вставки для добавления элементов в нижнюю часть подменю Все задачи .

CCM_INSERTIONPOINTID_ROOT_MENU (0x80000000)

IContextMenuProvider может использовать эту точку вставки для добавления элементов в корневое меню.

Ни основные расширения, ни сторонние расширения не могут добавлять элементы в корневое меню, за исключением точек вставки, добавленных IContextMenuProvider.

fFlags

Значение типа , указывающее один или несколько следующих флагов стиля:

MF_POPUP

Созданный элемент является подменю в контекстном меню. Элементы меню, точки вставки и другие подменю можно добавить в созданное подменю; Новый пункт меню, подменю или точка вставки должен использовать созданный член lCommandID созданного подменю в качестве значения члена lInsertionPointID .

MF_BITMAP

Эти флаги не поддерживаются; IContextMenuCallback2::AddItem вернет E_INVALIDARG.

MF_OWNERDRAW

Эти флаги не поддерживаются; IContextMenuCallback2::AddItem вернет E_INVALIDARG.

MF_SEPARATOR

Рисует горизонтальную линию разделителя.

Только IContextMenuProvider может добавлять пункты меню с заданными MF_SEPARATOR .

Следующие флаги работают так же, как и в API Windows.

MF_CHECKED

Выбирает пункт меню.

MF_DISABLED

Отключает пункт меню, чтобы его нельзя было выбрать, но флаг не помечает его.

MF_ENABLED

Включает пункт меню, чтобы его можно было выбрать, восстановив его из неактивного состояния.

MF_GRAYED

Отключает пункт меню, затеняя его, чтобы его нельзя было выбрать.

MF_MENUBARBREAK

Работает так же, как и флаг MF_MENUBREAK для строки меню. Для раскрывающегося меню, подменю или контекстного меню вертикальная линия отделяет новый столбец от старого.

MF_MENUBREAK

Places элемент в новой строке (для строки меню) или в новом столбце (для раскрывающегося меню, подменю или контекстного меню) без разделения столбцов.

MF_UNCHECKED

Не выбирает элемент (по умолчанию).

Следующие группы флагов нельзя использовать вместе:

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

fSpecialFlags

Значение типа , указывающее один или несколько следующих флагов:

CCM_SPECIAL_SEPARATOR (0x0001)

Игнорируйте все остальные параметры, кроме lInsertionPointID. Добавьте разделитель в конец меню или в указанную точку вставки. Разделители, размещенные в верхней или нижней части меню или подменю, не будут отображаться. Разделители без пунктов меню между ними будут сворачиваться в один разделитель.

Только IContextMenuProvider может добавлять разделители, специальные или иные.

CCM_SPECIAL_SUBMENU (0x0002)

Если это подменю пусто, оно отображается неактивным; это допустимо только для MF_POPUP элементов.

CCM_SPECIAL_DEFAULT_ITEM (0x0004)

Это пункт меню по умолчанию. Если этот флаг указан в нескольких пунктах меню, приоритет имеет последний элемент в каждом подменю.

CCM_SPECIAL_INSERTION_POINT (0x0008)

Игнорируйте все остальные параметры, кроме lCommandID и lInsertionPointID. Этот флаг создает новую точку вставки в конце точки вставки или подменю, определяемого lInsertionPointID. В созданную точку вставки можно добавить новые элементы меню, подменю или точки вставки; Новый элемент меню, подменю или точка вставки должны использовать элемент lCommandID созданной точки вставки в качестве значения члена lInsertionPointID .

CCM_SPECIAL_TESTONLY = 0x0010

Проверьте параметры элемента, но не добавляйте элемент меню. Возвращает код результата, указывающий, была ли операция Добавления успешной.

strLanguageIndependentName

Независимое от языка имя элемента меню. Получите это значение в приложениях модели автоматизации MMC 2.0 , получив свойство MenuItem.LanguageIndependentName . Элемент strLanguageIndependentName не может быть null или пустой строкой, если не добавлен разделитель или точка вставки; В противном случае метод IContextMenuCallback::AddItem завершится ошибкой с E_INVALIDARG в качестве возвращаемого значения.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Верхняя часть mmc.h

См. также раздел

IContextMenuCallback2

IContextMenuProvider

IExtendContextMenu

Работа с контекстными меню