Microsoft提供了一个类CMFCShellTreeCtrl
来浏览shell命名空间层次结构(基本上与浏览器窗口的左侧相同)。
此控件使用SHGetPathFromIDList()
以便从项目ID列表转到当前路径(所选项目)的字符串表示。
可以使用最终匹配其内部shell层次结构的任何字符串来设置其当前项目,即使所涉及的对象不是“在文件系统上” - 例如\\WOLF
将在Networking节点下选择计算机WOLF(假设您的LAN上有一台名为WOLF的计算机)。
但是,当您尝试从控件获取此类路径时,接口会响应一个空字符串,因为它依赖于SHGetPathFromIDList()
,它不会解析不在文件系统上的shell项。< / p>
有没有人知道一个更好的ImprovedSHGetPathFromIDList()
的实现,它适用于文件系统上没有的ITEMIDLIST(例如\ WOLF)?
我可以为shell树控件本身提供我自己的SelectPath()
和GetItemPath()
版本,实现我自己的版本的ITEMIDLIST&lt; - &gt;字符串逻辑使得两者完全对称(即我希望GetItemPath()返回先前用于成功SelectPath()的相同路径 - 或树视图中的任何节点。)
然而,这可以在其他地方使用,作为路径名和ITEMIDLIST之间的通用改进往返(毕竟,UNC名称是表达fielsystem路径的一种相当常见的方式!)
答案 0 :(得分:2)
AFAIK,非文件系统项目没有预制功能。您必须在每个项目上使用ITEMIDLIST
遍历IShellFolder::GetDisplayNameOf()
,指定SIGDN_PARENTRELATIVEPARSING
或SIGDN_DESKTOPABSOLUTEPARSING
标记,以手动构建路径字符串。