CONTEXTMENUITEM2 结构 (mmc.h)

MMC 2.0 中引入了CONTEXTMENUITEM2结构。

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 的命令 ID 参数。 如果此菜单项由 IContextMenuProvider 接口添加,然后选择该菜单项,则这是由 IContextMenuProvider::ShowContextMenu 传递回 pISelected 的命令 ID。 如果这是在 fSpecialFlags) 中设置CCM_SPECIAL_INSERTION_POINT (插入点,或者在 fFlags) 中设置了子菜单 (MF_POPUP,请在后续调用中使用 lCommandID 作为 lInsertionPointID (,有关详细信息,请参阅以下列表) 。 请仔细阅读以下讨论,因为新插入点 ID 中的特定位必须处于打开状态,而其他位必须关闭。

命令 ID 中的以下位需要对不是插入点或子菜单的项进行特殊处理。

CCM_COMMANDID_MASK_RESERVED (0xFFFF0000)

设置这些位时,无法添加插入点和子菜单以外的项。

插入点 ID 中的以下位需要对作为插入点 (fSpecialFlags 的项进行特殊处理, CCM_SPECIAL_INSERTION_POINT) 或子菜单 (fFlagsMF_POPUP) 。

CCM_INSERTIONPOINTID_MASK_SPECIAL (0xFFFF0000)

特殊行为。 管理单元可以根据需要使用其他位。

CCM_INSERTIONPOINTID_MASK_SHARED (0x80000000)

这些插入点和子菜单在上下文菜单的创建者、主扩展和第三方扩展之间共享。 添加到共享插入点或子菜单的项可供上下文菜单、主扩展和第三方扩展的创建者使用。

如果未设置此位, IContextMenuProvider 接口和每个扩展都可以使用相同的 ID。 每个 ID 引用不同的插入点或子菜单。

只有上下文菜单创建者和主管理单元可以创建共享的插入点或子菜单。

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY (0x40000000)

必须为主管理单元创建的共享插入点和子菜单设置此位,而不是为上下文菜单创建者创建的插入点和子菜单设置。 这可以防止共享插入点和子菜单的两个源之间的 ID 冲突。

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)

主管理单元可以使用此插入点将项添加到 “新建 ”子菜单的顶部。 “新建”子菜单在作用域和结果窗格的上下文菜单中可用。

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 菜单项。

以下标志的工作方式与在 Windows API 中的工作方式相同。

MF_CHECKED

选择菜单项。

MF_DISABLED

禁用菜单项,使其无法被选中,但标志不会使菜单项变暗。

MF_ENABLED

启用菜单项,以便可以选择菜单项,使其从灰显状态还原。

MF_GRAYED

禁用菜单项,使其变暗,使其无法选中。

MF_MENUBARBREAK

功能与菜单栏的 MF_MENUBREAK 标志相同。 对于下拉菜单、子菜单或快捷菜单,竖线将新列与旧列分隔开。

MF_MENUBREAK

Places菜单栏) 的新行 (上,或者在下拉菜单、子菜单或快捷菜单) 的新列 (中不分隔列。

MF_UNCHECKED

不选择默认) (项。

以下标志组不能一起使用:

  • MF_DISABLEDMF_ENABLEDMF_GRAYED
  • MF_MENUBARBREAKMF_MENUBREAK
  • MF_CHECKEDMF_UNCHECKED

fSpecialFlags

一个 值,该值指定以下一个或多个标志:

CCM_SPECIAL_SEPARATOR (0x0001)

忽略除 lInsertionPointID 以外的所有其他参数。 在菜单末尾或指定的插入点处添加分隔符。 不会显示位于菜单或子菜单顶部或底部的分隔符。 两者之间没有菜单项的分隔符将折叠为单个分隔符。

只有 IContextMenuProvider 可以添加特殊或其他分隔符。

CCM_SPECIAL_SUBMENU (0x0002)

如果此子菜单为空,则显示为灰色;这仅适用于 MF_POPUP 项。

CCM_SPECIAL_DEFAULT_ITEM (0x0004)

这是默认菜单项。 如果多个菜单项指定此标志,则每个子菜单中的最后一项优先。

CCM_SPECIAL_INSERTION_POINT (0x0008)

忽略 除 lCommandIDlInsertionPointID 以外的所有其他参数。 此标志在 lInsertionPointID 标识的插入点或子菜单的末尾创建新的插入点。 可以将新菜单项、子菜单或插入点添加到创建的插入点;新的菜单项、子菜单或插入点应使用创建的插入点的 lCommandID 成员作为 lInsertionPointID 成员值。

CCM_SPECIAL_TESTONLY = 0x0010

验证项参数,但不添加菜单项。 返回一个结果代码,该代码指示 Add 操作是否成功。

strLanguageIndependentName

菜单项与语言无关的名称。 通过获取 MenuItem.LanguageIndependentName 属性,在 MMC 2.0 自动化对象模型应用程序中检索此值。 strLanguageIndependentName 成员不能为 NULL 或空字符串,除非添加了分隔符或插入点;否则,IContextMenuCallback::AddItem 方法将失败,E_INVALIDARG作为返回值。

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
标头 mmc.h

另请参阅

IContextMenuCallback2

IContextMenuProvider

IExtendContextMenu

使用上下文菜单