我的一个应用程序有一个类似Windows资源管理器的文件列表控件。当用户右键单击文件时,我可以成功显示资源管理器上下文菜单(带有我自己的一些额外选项)。但是,如果用户右键单击列表控件本身(未选择任何项目),则我无法显示“正确”的上下文菜单。我想在右侧显示您在Windows资源管理器中看到的那个,而不是左侧树中显示的那个。
我在GetUIObjectOf的调用中尝试了很多变化,我浏览了Google网页等,但我还没有找到解决方案。有什么帮助吗?
答案 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,其余的菜单项,你必须自己添加。