我正在开发名称空间扩展,它提供了服务器上文件的虚拟视图。在此视图中,我需要使用叠加图标提供文件的不同状态(使用中,离线,不同步等)。
我阅读了实现覆盖处理程序的文章,并且我想在我们的一个覆盖处理程序中尝试处理它,它实现了IShellIconOverlayIdentifier接口。
我看到IShellIconOverlayIdentifier :: IsMemberOf(),只有当我访问普通文件系统上的文件时才调用其他函数,即c:\,d:\等。当我浏览命名空间扩展时,不会调用这些调用一点都不这是为什么?如何在Namespace扩展中为对象实现叠加?
的问候, 马杜
答案 0 :(得分:3)
添加叠加图标的唯一方法是在NSE中实施IShellIconOverlay。但问题是IShellIconOverlay.GetOverlayIndex和IShellIconOverlay.GetOverlayIconIndex必须返回从 SHELL 图像列表中收到的图标。可以使用SHGetIconOverlayIndex函数接收来自shell图像列表的叠加图标。并且 NO 方式可以在shell图像列表中添加其他叠加图标。
如果您想使用链接或共享图标等标准叠加图标,请使用SHGetIconOverlayIndex。但是如果你想使用自定义图标,你必须使用“hack”。 Hack是简单的附加覆盖外壳扩展。只有覆盖外壳扩展可以将其他叠加图标添加到外壳图像列表中。在IShellIconOverlayIdentifier.GetOverlayInfo中,您将返回您的图标和索引,IShellIconOverlayIdentifier.IsMemberOf将始终返回S_FALSE。在IShellIconOverlay_GetOverlayIndex中的NSE内部,您将使用您的图标和索引调用SHGetIconOverlayIndex。
您必须为每个图标使用单独的overlay shell扩展。但是不要忘记Windows对系统中注册的overlay shell扩展的最大数量有限制。我不记得确切的数字,但它大约是15。