图标覆盖处理程序的命名空间扩展

时间:2014-01-07 15:37:30

标签: windows com atl windows-shell shell-extensions

我正在开发名称空间扩展,它提供了服务器上文件的虚拟视图。在此视图中,我需要使用叠加图标提供文件的不同状态(使用中,离线,不同步等)。

我阅读了实现覆盖处理程序的文章,并且我想在我们的一个覆盖处理程序中尝试处理它,它实现了IShellIconOverlayIdentifier接口。

我看到IShellIconOverlayIdentifier :: IsMemberOf(),只有当我访问普通文件系统上的文件时才调用其他函数,即c:\,d:\等。当我浏览命名空间扩展时,不会调用这些调用一点都不这是为什么?如何在Namespace扩展中为对象实现叠加?

的问候, 马杜

1 个答案:

答案 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。

NSE overlay icon

您必须为每个图标使用单独的overlay shell扩展。但是不要忘记Windows对系统中注册的overlay shell扩展的最大数量有限制。我不记得确切的数字,但它大约是15。