OverlayIcon 制作流程及注意项
2012-02-07 14:21
295 查看
OverlayIcon制作流程及注意项
为了制作类似SVN的图标覆盖特效,我确实花了一些时间。目前做到的程度是开发的DLL其Release版本可以在XP、Win7上使用。
第一步:
参考Howto overlay an icon over existing shell objects in 3 easy steps – CodeProject这篇文章,按步骤做。
这一步做完后,编译会出现:
error C2787: “IShellIconOverlayIdentifier”: 没有与该对象关联的 GUID
这样的错误
第二步:
在MyOverlayIcon.h文件添加
struct _declspec (uuid("987423F4-904A-4ACF-9803-EC28B51C1993"))IShellIconOverlayIdentifier;
//UUID替换为自己工程中的UUID
这样编辑将不会出现错误了。
第三步:
检查注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\]下的项是否超过了15个
如果该键含有太多的SubKey那么也将不会显示,或者仅在资源管理器的左边的树形结构上进行显示。
第四步:
重启Explorer进程,然后右键“刷新”。
第五步:
检查工程的属性->配置属性->C/C++->预处理器->预处理器定义
里面的值要包含:_ATL_NO_UUIDOF(我不知道为什么,但是不写就真的不行)
IShellIconOverlayIdentifier说明三个函数说明:
Shell通过调用IShellIconOverlayIdentifier::GetOverlayInfo请求处理程序图标覆盖的位置。图标覆盖处理程序返回包含覆盖图标的文件的名称,以及他们在文件中的索引。然后,Shell添加这些图标覆盖到系统图像列表。
Shell通过调用IShellIconOverlayIdentifier::GetPriority来确定图标覆盖的优先级。优先级值是从0到100的数字,其中100表示最低优先级。如果有多个图标覆盖被特定文件请求,Shell使用这些值来帮助确定哪个图标覆盖将显示
在绘画一个对象图标之前,Shell传递对象名称到每个图标覆盖处理程序的IShellIconOverlayIdentifier::IsMemberOf方法。图标覆盖处理程序通常与特定文件分组相关。例如,图标覆盖处理程序可能请求一个文件类型的所有成员的一个覆盖,就像一个.myp文件名扩展的所有文件。如果处理程序想要他的图标覆盖被显示,它返回S_OK。然后Shell调用处理程序IShellIconOverlayIdentifier::GetOverlayInfo方法决定哪个图标将显示。
说明:
1. 目前不知道如何调试实现IShellIconOverlayIdentifier接口的DLL。在VS2005下选择Debug模式,启动调试我也输入了C:\windows\explorer.exe进程,但是提示“无法找到explorer.exe的调试信息”。故开发OverlayIcon特效时如何调试是个问题。
2. 为了能在XP上也运行,需要考虑在VS2005中,项目属性->配置属性->常规->ATL的使用选择“静态连接到ATL”。
3. 在Win7上开发时,可以考虑先关掉UAC,不然效果也有可能无法出现。
为了制作类似SVN的图标覆盖特效,我确实花了一些时间。目前做到的程度是开发的DLL其Release版本可以在XP、Win7上使用。
第一步:
参考Howto overlay an icon over existing shell objects in 3 easy steps – CodeProject这篇文章,按步骤做。
这一步做完后,编译会出现:
error C2787: “IShellIconOverlayIdentifier”: 没有与该对象关联的 GUID
这样的错误
第二步:
在MyOverlayIcon.h文件添加
struct _declspec (uuid("987423F4-904A-4ACF-9803-EC28B51C1993"))IShellIconOverlayIdentifier;
//UUID替换为自己工程中的UUID
这样编辑将不会出现错误了。
第三步:
检查注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\]下的项是否超过了15个
如果该键含有太多的SubKey那么也将不会显示,或者仅在资源管理器的左边的树形结构上进行显示。
第四步:
重启Explorer进程,然后右键“刷新”。
第五步:
检查工程的属性->配置属性->C/C++->预处理器->预处理器定义
里面的值要包含:_ATL_NO_UUIDOF(我不知道为什么,但是不写就真的不行)
IShellIconOverlayIdentifier说明三个函数说明:
Shell通过调用IShellIconOverlayIdentifier::GetOverlayInfo请求处理程序图标覆盖的位置。图标覆盖处理程序返回包含覆盖图标的文件的名称,以及他们在文件中的索引。然后,Shell添加这些图标覆盖到系统图像列表。
Shell通过调用IShellIconOverlayIdentifier::GetPriority来确定图标覆盖的优先级。优先级值是从0到100的数字,其中100表示最低优先级。如果有多个图标覆盖被特定文件请求,Shell使用这些值来帮助确定哪个图标覆盖将显示
在绘画一个对象图标之前,Shell传递对象名称到每个图标覆盖处理程序的IShellIconOverlayIdentifier::IsMemberOf方法。图标覆盖处理程序通常与特定文件分组相关。例如,图标覆盖处理程序可能请求一个文件类型的所有成员的一个覆盖,就像一个.myp文件名扩展的所有文件。如果处理程序想要他的图标覆盖被显示,它返回S_OK。然后Shell调用处理程序IShellIconOverlayIdentifier::GetOverlayInfo方法决定哪个图标将显示。
说明:
1. 目前不知道如何调试实现IShellIconOverlayIdentifier接口的DLL。在VS2005下选择Debug模式,启动调试我也输入了C:\windows\explorer.exe进程,但是提示“无法找到explorer.exe的调试信息”。故开发OverlayIcon特效时如何调试是个问题。
2. 为了能在XP上也运行,需要考虑在VS2005中,项目属性->配置属性->常规->ATL的使用选择“静态连接到ATL”。
3. 在Win7上开发时,可以考虑先关掉UAC,不然效果也有可能无法出现。
相关文章推荐
- OverlayIcon 制作流程及注意项
- OverlayIcon 制作流程及注意项
- 企业网站制作需要注意哪些流程
- jasperReports+ireport 报表制作流程
- CCNA考试流程及注意事项
- 使用SVG中的Symbol元素制作Icon【摘转】
- vc 实现overlayicon
- 三方依赖库在Cocoapods上的制作流程2015年版
- 制作blog流程
- 制作网页 完成后需要注意的编码问题
- IOS Certificates 制作流程 (Adobe FlashBuilder)
- Android Market google play store帐号注册方法流程 及发布应用注意事项
- ICON制作工具,图标查找网站http://www.iconfinder.net
- 动作编辑器(Cocos2dx)制作流程详解及附上响应鼠标滚轴事件、反转坐标系、导入/创建资源目录等知识点代码
- 学习笔记 1:自己制作的子弹预制体 注意点
- 制作流程图如何设置图形属性?
- 在电脑上制作sqlite数据库时应该注意的问题
- VC工具栏图标制作流程
- [美术制作流程]魔兽世界角色换装分析
- 基于BusyBox与红帽2.6.38.5内核完成的微型系统制作流程