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


Метод IContextMenu::QueryContextMenu (shobjidl_core.h)

Добавляет команды в контекстное меню.

Синтаксис

HRESULT QueryContextMenu(
  HMENU hmenu,
  UINT  indexMenu,
  UINT  idCmdFirst,
  UINT  idCmdLast,
  UINT  uFlags
);

Параметры

hmenu

Тип: HMENU

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

indexMenu

Тип: UINT

Отсчитываемая от нуля позиция, в которую вставляется первый новый пункт меню.

idCmdFirst

Тип: UINT

Минимальное значение, которое обработчик может указать для идентификатора пункта меню.

idCmdLast

Тип: UINT

Максимальное значение, которое обработчик может указать для идентификатора элемента меню.

uFlags

Тип: UINT

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

CMF_NORMAL (0x00000000)

0x00000000. Указывает на нормальную работу. Расширение контекстного меню, расширение пространства имен или обработчик перетаскивания могут добавлять все пункты меню.

CMF_DEFAULTONLY (0x00000001)

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

CMF_VERBSONLY (0x00000002)

0x00000002. Контекстное меню — это контекстное меню файла ярлыка (обычно это файл .lnk). Обработчики контекстного меню должны игнорировать это значение.

CMF_EXPLORE (0x00000004)

0x00000004. Окно дерева windows Обозреватель присутствует.

CMF_NOVERBS (0x00000008)

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

CMF_CANRENAME (0x00000010)

0x00000010. Вызывающее приложение поддерживает переименование элементов. Контекстное меню или обработчик перетаскивания должны игнорировать этот флаг. Расширение пространства имен должно добавить элемент Переименовать в меню, если применимо.

CMF_NODEFAULT (0x00000020)

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

CMF_INCLUDESTATIC (0x00000040)

Это значение недоступно.

Windows Server 2003 и Windows XP: 0x00000040. Создается статическое меню. Только браузер должен использовать этот флаг; все остальные расширения контекстного меню должны игнорировать его.

CMF_ITEMMENU (0x00000080)

0x00000080. Вызывающее приложение вызывает контекстное меню для элемента в представлении (в отличие от фона представления).

Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_EXTENDEDVERBS (0x00000100)

0x00000100. Вызывающему приложению нужны расширенные команды. Обычные команды отображаются, когда пользователь щелкает объект правой кнопкой мыши. Чтобы отобразить расширенные команды, пользователь должен щелкнуть правой кнопкой мыши при нажатии клавиши SHIFT.

CMF_DISABLEDVERBS (0x00000200)

0x00000200. Вызывающее приложение намерено вызывать отключенные команды, например устаревшие меню.

Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_ASYNCVERBSTATE (0x00000400)

0x00000400. Состояние команды можно вычислять асинхронно.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_OPTIMIZEFORINVOKE (0x00000800)

0x00000800. Сообщает обработчикам контекстного меню, которые не поддерживают вызов глагола через каноническое имя команды для обхода IContextMenu::QueryContextMenu в своей реализации.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_SYNCCASCADEMENU (0x00001000)

0x00001000. Заполнение подменю синхронно.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_DONOTPICKDEFAULT (0x00002000)

0x00002000. Если глагол явно не указан, не используйте глагол по умолчанию вместо нее.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение недоступно.

CMF_RESERVED (0xffff0000)

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

Возвращаемое значение

Тип: HRESULT

В случае успешного выполнения возвращает значение HRESULT , для которого задано значение серьезности SEVERITY_SUCCESS, а для его кодового значения задано смещение самого большого назначенного идентификатора команды плюс один. Например, если idCmdFirst имеет значение 5 и в меню добавляются три элемента с идентификаторами команд 5, 7 и 8, возвращаемое значение должно быть MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 – 5 + 1). В противном случае возвращается значение ошибки COM.

Комментарии

Этот метод должен вызывать insertMenu или InsertMenuItem , чтобы вставить пункты меню в меню, заданное hmenu. Параметр indexMenu содержит индекс, используемый для первого пункта меню. Идентификатор каждого пункта меню должен находиться в диапазоне, определенном идентификаторами idCmdFirst и idCmdLast.

Распространенной практикой является установка идентификатора первой команды idCmdFirst (смещение нуля) и увеличение смещения для каждой дополнительной команды на единицу. Это гарантирует, что вы не превысите idCmdLast и сохраните диапазон идентификаторов, доступных для использования другими обработчиками. Сохраните смещения для справки, так как они могут использоваться для идентификации команды в последующих вызовах IContextMenu::GetCommandString и IContextMenu::InvokeCommand.

Если оболочка впоследствии вызывает другой обработчик контекстного меню, она будет использовать значение кода возвращенного HRESULT для задания idCmdFirst при вызове метода QueryContextMenu этого обработчика.

Когда обработчик контекстного меню добавляет элемент всплывающего меню, он должен использовать IContextMenu::QueryContextMenu , чтобы добавить хотя бы один элемент в это меню для пересылки WM_INITMENUPOPUP сообщения.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header shobjidl_core.h (включая Shobjidl.h)
DLL Shell32.dll (версия 4.0 или более поздняя)