4

微软提供了一个类CMFCShellTreeCtrl用于浏览 shell 命名空间层次结构的类(本质上与资源管理器窗口的左侧相同)。

此控件用于SHGetPathFromIDList()从项目 ID 列表转到当前路径(选定项目)的字符串表示形式。

即使所涉及的对象不在“文件系统上”,也可以使用最终匹配其内部 shell 层次结构的任何字符串设置其当前项 - 例如\\WOLF,将选择 Networking 节点下的机器 WOLF(假设有一台名为 WOLF 的机器在您的局域网上)。

但是,当您尝试从控件获取这样的路径时,接口会以空白字符串响应,因为它依赖于SHGetPathFromIDList()它不会解析不在文件系统上的 shell 项。

有谁知道一个更好的实现,ImprovedSHGetPathFromIDList()它可以与文件系统上没有的 ITEMIDLIST(例如 \WOLF)一起使用?


我可以为 shell 树控件本身提供我自己的版本SelectPath()GetItemPath(),实现我自己版本的 ITEMIDLIST <-> 字符串逻辑,以便两者完全对称(即我希望 GetItemPath() 返回使用的相同路径以前成功 SelectPath() - 或树视图中的任何节点)。

但是,这可以在其他地方使用,作为路径名和 ITEMIDLIST 之间的一般改进的往返(毕竟,UNC 名称是表示字段系统路径的一种相当常见的方式!)

4

1 回答 1

2

AFAIK,非文件系统项目没有预制功能。您必须遍历每个项目的ITEMIDLISTusing ,指定or标志,以手动构建路径字符串。IShellFolder::GetDisplayNameOf()SIGDN_PARENTRELATIVEPARSINGSIGDN_DESKTOPABSOLUTEPARSING

于 2013-03-15T15:51:11.783 回答