我为Windows资源管理器开发名称空间扩展。 在我的扩展中,我使用叠加图标,我实现了界面: IShellIconOverlay
int GetOverlayIndex(IntPtr pidl, out int iconIndex);
int GetOverlayIconIndex(IntPtr pidl, out int iconIndex);
在该函数中,我使用函数SHGetIconOverlayIndex从dll位置和索引中获取图像列表中的图标叠加索引。
我的问题是我在我使用的另一个扩展程序的Overlay Identifiers注册表列表中已有图标,我想使用从我的overlay图标扩展名到我的命名空间扩展名的相同图标。 目前SHGetIconOverlayIndex函数在图像列表中创建新的插槽,众所周知,窗口有14-15个叠加图标的限制。
那么如何在这两个扩展名之间回收我的图标呢?
答案 0 :(得分:0)
如果'SHGetIconOverlayIndex'函数为您提供有限的系统图像列表,为什么不使用'LoadLibrary' - >'FindResource'或使用'ExtractIcon'从Overlay图标扩展的资源加载图标。您可以在命名空间扩展中创建自己的图像列表,并使用“ImageList_SetOverlayImage”将叠加图像作为叠加添加到此图像列表。
答案 1 :(得分:0)
MSDN说SHGetIconOverlayIndex:
注意在初始化期间将图像加载到系统映像列表后,无法更改。 pszIconPath和iIconIndex指定的文件名和索引仅用于标识图标叠加。 SHGetIconOverlayIndex不能用于修改系统图像列表。
所以只需将文件名和索引传递给SHGetIconOverlayIndex即可。 Window不会创建新的插槽,并且将使用已由叠加图标处理程序创建。