【问题标题】:icon overlay handlers for namespace extension命名空间扩展的图标覆盖处理程序
【发布时间】:2014-01-25 08:59:31
【问题描述】:

我正在开发命名空间扩展,它提供服务器上文件的虚拟视图。在这个视图中,我需要使用覆盖图标提供文件的不同状态(使用中、离线、不同步等)。

我阅读了实现覆盖处理程序的文章,并认为我会尝试在我们的一个覆盖处理程序中处理这个问题,它实现了 IShellIconOverlayIdentifier 接口。

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

问候, 马杜

【问题讨论】:

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


    【解决方案1】:

    添加覆盖图标的唯一方法是在您的 NSE 中实现 IShellIconOverlay。但问题是 IShellIconOverlay.GetOverlayIndex 和 IShellIconOverlay.GetOverlayIconIndex 必须返回从 SHELL 图像列表接收的图标。可以使用 SHGetIconOverlayIndex 函数接收来自 shell 图像列表的叠加图标。并且有 NO 方法可以将额外的叠加图标添加到 shell 图像列表中。

    如果你想使用标准的覆盖图标,如链接或共享图标,只需使用 SHGetIconOverlayIndex。但是如果你想使用自定义图标,你必须使用“hack”。 Hack 是简单的附加覆盖外壳扩展。只有覆盖外壳扩展可以在外壳图像列表中添加额外的覆盖图标。在 IShellIconOverlayIdentifier.GetOverlayInfo 中,您将返回您的图标和索引,IShellIconOverlayIdentifier.IsMemberOf 将始终返回 S_FALSE。在 IShellIconOverlay_GetOverlayIndex 的 NSE 中,您将使用您的图标和索引调用 SHGetIconOverlayIndex。

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

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 2014-06-16
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多