【发布时间】:2015-10-24 14:45:13
【问题描述】:
我使用COM 为 Windows 创建了一个 shell 扩展,但是我似乎无法正确匹配我在 IContextMenu::QueryContextMenu 的重载中添加的项目的 ID 与我在 IContextMenu::InvokeCommand 的重载中收到的 ID。在我的代码中,我使用了InsertMenu 和InsertMenuItem(据我了解,它们的作用相同,但后者具有更多功能?)。但是我不确定传递给InsertMenu/InsertMenuItem 的哪些参数对应于我必须在LPCMINVOKECOMMANDINFO::lpVerb 中寻找的参数。我需要一些方法来轻松知道当我将项目x、y、z 添加到上下文菜单时,我可以准确地知道x、y 或z 中的哪一个已被点击.
编辑:似乎动词等于当前菜单/子菜单中项目从上到下的数字。但是,我有两个子菜单,每个子菜单都有x 的项目数量,因此它们具有相同的 ID 1、2、3。如何设置自定义 ID 或其他内容?
【问题讨论】:
-
不要要说明书,已经写好了。显示您的代码。
-
写在哪里?
-
@HansPassant 我似乎找不到能很好解释这一点的手册,只有一个在线教程,它只添加了一个动词,你总是知道它就是那个
-
我怀疑你得到的
lpVerb可能是MAKEINTRESOURCE(yourCommandId)。请与IS_INTRESOURCE联系。或者,它可以是您通过实现IContextMenu::GetCommandString(GCS_VERB{A|W})与命令关联的任何动词 -
这在此处记录:msdn.microsoft.com/en-us/library/windows/desktop/hh127443.aspx。在本文档中,一个自定义命令“IDM_DISPLAY”作为示例完全实现。
标签: c++ com contextmenu shell-extensions