ShellIconOverlayIdentifiers – 为什么这么less?

此时,每个人都知道ShellIconOverlayIdentifiers (来自MSDN)的数量有限制:

系统可支持的不同图标叠加处理程序的数量受系统映像列表中图标叠加可用空间的限制。 目前有15个插槽分配给图标叠加,其中一些是由系统保留的。 出于这个原因,只有在没有令人满意的select时才应该实现图标叠加处理程序

我可以理解Windows 95中的15个重叠限制。但是在有内存的情况下,众多内核和GPU的环境中,在现代操作系统中有这么一个低数量的技术原因吗?

为什么这个值是不可configuration的?

在给出“性能”答案之前,请考虑: Windows允许进行configuration,以便可以杀死性能……为什么select此问题具体?

除非有人在Windows Shell团队中工作,否则我怀疑你会得到一个真正解决技术限制的答案,以及它们如何影响deviseselect。 但我会尝试…

我的猜测是没有任何技术限制,或者至less现在没有。 真正的原因可能是没有人花时间坐下来更新代码,devise和规范来解除这个限制。 function并不是默认实现的,只是因为过去几年计算环境的变化并不意味着有人坐下来重写Windows,充分利用所有这些变化。

你也应该认为这是一个有意识的deviseselect,而不是强加的限制。 Raymond Chen(他实际上在壳牌团队工作)发表了一篇博客文章,回应了关于Windows 7除去“共享手”叠加层的哗然。 他提出了一个引人注目的论点:图标叠加实际上不是展示信息的理想方式(超出了系统限于15的事实)[强调增加]:

一般来说,叠加层不是一种呈现信息的好方法, 因为每个图标只能有一个叠加层,每个ImageList有15个叠加层的限制。 如果有两个或两个以上的叠加适用于一个项目,则其中一个将获胜,另一个将失败,此时叠加层的价值作为确定项目属性的一种方式,因为唯一的方法是确定的一个属性是缺less的是当你看不到任何覆盖。 (如果您看到其他覆盖图,则不能分辨是因为您的财产丢失了还是因为其他覆盖图正在显示而不是您的财产。)

对我来说,看起来合理的是,在大多数现实世界的情况下,额外的混乱添加到壳是根本不值得的。 Windows Shell团队显然得出了同样的结论,并削减了“共享手”的覆盖。 雷蒙德的直接解释是:

鉴于人们如何使用电脑的变化,共享信息正在变得越来越多的默认状态。 当你build立一个家庭组时,几乎所有东西都将被共享。 要删除视觉混乱,信息被移动到详细信息窗格。

而且,我知道你明确地要求不要提到性能,但是Windows确实试图阻止你在自己的脚下射击。 用户要求在shell中具有响应能力,覆盖图标可能会干扰这一点。 作为进一步的证据,他们不是优先考虑的事情, 另一篇由雷蒙德·陈(Raymond Chen)撰写的博客则指出:

具有自私观点的应用程序的另一个例子来自开发图标重叠处理程序的公司。 shell将重叠计算视为一个低优先级的项目,因为在屏幕上获取图标更重要,所以用户可以开始做任何他们想做的事情。 装饰可以晚点来。 这家公司想知道是否有一种方法可以改善他们的performance,甚至在图标出现之前就将其覆盖在屏幕上,performance出对“表演”的一种非常自私的解释。

对科迪实际问题的出色反应。 至于为什么15而不是一些其他的数字,极限被烘焙到ImageList控件本身。

这一切都非常好,正如科迪·格雷(Cody Gray)所解释的那样,但坦率地说,这是非常不具有想象力的,而且据报道,在幕后,听起来有些沮丧

在2015年和Windows 10中,当然有能力也需要有更好的能力,正如我注意到的那样,目前有三十多个覆盖,而且必须优先考虑我最想看到的那些,而这绝不是大多数人最担心的。 另外我还看到像Box这样的进取型厂商过度竞争,试图优先考虑自己,而这永远不会有好处。

这是一个可能性。 如果多个重叠的图标有一个通用的重叠指示符, Google Chrome Appsbutton等多种颜色的小矩形matrix? 单独重叠只会显示长列表中的重叠。

然后,当鼠标指针遇到图标时,一个小的popup窗口收集所有的图标变化,以查看(小图标大小或稍大)。 当鼠标hover时,每个叠加的图标依次通过工具提示来宣告它是什么。

现在,您可以拥有所有需要的图标叠加层,各种云中的状态,与Tortoise工具等相关的存储库指示。