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


Структура CONTEXTMENUITEM (mmc.h)

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

Синтаксис

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

Члены

strName

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

strStatusBarText

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

lCommandID

Значение типа , указывающее идентификатор команды для пунктов меню. Если этот пункт меню добавляется IExtendContextMenu::AddMenuItems и затем выбран, это идентификатор команды, который передается обратно в 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 с нулевым значением относится к корневому меню для этого контекстного меню. Ноль можно использовать взаимозаменяемо с CCM_INSERTIONPOINTID_ROOT_MENU. Имейте в виду, что только интерфейс IContextMenuProvider может добавлять элементы непосредственно в корневое меню. Расширения могут добавлять элементы только в точки вставки и подменю, добавленные в корневое меню IContextMenuProvider или MMC.

CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000

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

CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001

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

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

MF_OWNERDRAW

Эти флаги не поддерживаются и приведут к возврату IContextMenuCallback::AddItemE_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

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

Требования

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

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

IContextMenuCallback

IContextMenuProvider

IExtendContextMenu

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