图标处理程序

【勇芳软件工作室】汉化HomePreviousNext

应用程序可以自定义shell为应用程序的文件类型显示的图标。图标界面还允许应用程序在应用程序的文件结构中指定文件夹和子文件夹的图标。

应用程序可以通过两种方式指定其文件类型的图标。最简单的方法是通过在程序信息下向注册表添加DefaultIcon键来指定要用于特定文件类型的所有文件的类图标。有关指定类图标的信息,请参阅设置文件类的默认图标.

应用程序可以使用%1值与DefaultIcon键。该值表示此类型的每个文件实例可以具有不同的图标。应用程序必须为文件类型提供图标处理程序,并为应用程序的的shellex键添加一个IconHandler键。一个应用程序可以只有一个条目IconHandler键,其键值表示图标处理程序的CLSID。

的shellex

IconHandler

{00000000-1111-2222-3333-00000000000003}

DefaultIcon = %1

要有自定义的图标,应用程序必须提供一个实现IExtractIcon接口的图标处理程序。当它要显示具有特定于实例的图标的文件类型的图标时,系统将遵循以下步骤:

1.检索处理程序的类标识符。

2.通过使用CLSID调用CoCreateInstance函数来创建处理程序对象。

3.通过调用IPersistFile::Load成员函数来初始化实例。

4.使用QueryInterface成员函数进入IExtractIcon界面。

5.调用IExtractIcon::GetIconLocationIExtractIcon::Extract成员函数。

除了通常的IUnknown成员函数之外,IExtractIcon界面还具有提取GetIconLocation成员函数。

系统调用GetIconLocation成员函数来获取要显示的图标的位置和索引。通常,图标位置是可执行文件或DLL文件名,但它可以是任何文件。

当需要显示不在可执行文件或DLL文件中的文件的图标时,系统将调用提取成员函数。应用程序通常在其可执行文件或DLL文件中具有文件图标,因此图标处理程序可以简单地将此成员函数实现为返回E_FAIL错误值的返回函数。只有当图标图像以应用程序定义的格式存储在文件中时,才需要实现提取成员函数。当文件的图标位于单独的.ICO文件(或任何其他类型的文件)中时,图标处理程序必须提取shell的图标并将其返回到此成员函数中。