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,其代码值设置为已分配的最大命令标识符的偏移量加上 1。 例如,如果 idCmdFirst 设置为 5,并且向命令标识符为 5、7 和 8 的菜单添加三个项,则返回值应为 MAKE_HRESULT (SEVERITY_SUCCESS、0、8 - 5 + 1) 。 否则,它将返回 COM 错误值。

注解

此方法应调用 InsertMenuInsertMenuItem ,以将其菜单项插入 hmenu 指定的菜单中。 indexMenu 参数保存要用于第一个菜单项的索引。 每个菜单项的标识符必须位于 idCmdFirstidCmdLast 定义的范围内。

一种常见做法是将第一个命令标识符设置为 idCmdFirst (零) 偏移量,并将每个附加命令的偏移量递增 1。 这种做法可确保不超过 idCmdLast ,并保留可供其他处理程序使用的标识符范围。 存储偏移量以供参考,因为它们可用于在后续调用 IContextMenu::GetCommandStringIContextMenu::InvokeCommand 时标识命令。

如果 Shell 随后调用另一个快捷菜单处理程序,它将在调用该处理程序的 QueryContextMenu 方法时使用返回的 HRESULT 的代码值来设置 idCmdFirst

当上下文菜单处理程序添加弹出菜单项时,它必须使用 IContextMenu::QueryContextMenu 向该菜单添加至少一项,以便转发WM_INITMENUPOPUP消息。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h (包括 Shobjidl.h)
DLL Shell32.dll (版本 4.0 或更高版本)