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

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

CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000

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

插入点 ID 中的某些位需要对作为插入点 (fSpecialFlagsCCM_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 表示此上下文菜单的根菜单。 零可以与 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::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

验证项参数,但不添加菜单项。 返回指示添加是否成功的结果代码。

要求

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

另请参阅

IContextMenuCallback

IContextMenuProvider

IExtendContextMenu

使用上下文菜单