右侧资源管理器上下文菜单(IID_IContextMenu?)

时间:2009-07-28 12:24:24

标签: c++ winapi

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

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

2 个答案:

答案 0 :(得分:2)

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

IShellFolder::CreateViewObject Method

  

此方法也用于请求   暴露其中一个的对象   可选接口,包括   IContextMenu或IExtractIcon。在这   上下文,CreateViewObject类似   在使用中   的IShellFolder :: GetUIObjectOf。然而,   你调用IShellFolder :: GetUIObjectOf   请求其中一个对象   文件夹包含的项目。呼叫   IShellFolder :: CreateViewObject to   请求该文件夹的对象   本身。

答案 1 :(得分:0)

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