структура 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 |