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