【问题标题】:Right side Explorer context menu (IID_IContextMenu?)右侧资源管理器上下文菜单 (IID_IContextMenu?)
【发布时间】:2009-08-03 06:55:38
【问题描述】:

我的一个应用程序有一个类似于文件列表控件的 Windows 资源管理器。当用户右键单击文件时,我可以成功显示资源管理器上下文菜单(带有我自己的一些额外选项)。但是,如果用户右键单击列表控件本身(未选择任何项目),则我无法显示“正确”上下文菜单。我想在右侧显示您在 Windows 资源管理器中看到的那个,而不是左侧树中的那个。

我在调用 GetUIObjectOf 时尝试了很多变体,我浏览了 Google 网络等,但我还没有找到解决方案。有什么帮助吗?

【问题讨论】:

  • 这是一个非常棘手的问题。我怀疑有人会知道答案:-)

标签: c++ winapi


【解决方案1】:

调用 IShellFolder::CreateViewObject() 以获取文件夹本身的 IContextMenu。 IShellFolder::GetUIObjectOf() 用于检索文件夹内单个项目的接口,而不是文件夹本身。这在 MSDN 的文档中有说明:

IShellFolder::CreateViewObject Method

这个方法也用于请求 暴露几个之一的对象 可选接口,包括 IContextMenu 或 IExtractIcon。在这个 上下文,CreateViewObject 类似 在使用中 IShellFolder::GetUIObjectOf。然而, 你打电话给 IShellFolder::GetUIObjectOf 为其中一个请求一个对象 文件夹包含的项目。称呼 IShellFolder::CreateViewObject 到 为文件夹请求一个对象 自己。

【讨论】:

    【解决方案2】:

    Remy Lebeau 发布的解决方案可能是要走的路,但如果您不使用所有 shell 对象或想要更自定义的菜单,您可以在 HKCR\Directory\Background 中查找实现的 GUID 列表IContextMenu,其余的菜单项,您必须自己添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多