缩略图处理程序

Windows Vista 使用特定于文件的缩略图图像比早期版本的 Windows 更大。 Windows Vista 在所有视图中、对话框中以及提供这些视图的任何文件类型中使用它们。 其他应用程序也可以使用缩略图。 缩略图显示也已更改。 现在,用户可选择大小的连续范围可用,而不是 Windows XP 中提供的图标和缩略图等离散大小。

注意

可能会听到这些缩略图称为实时图标。

 

32 位分辨率和大小为 256x256 像素的缩略图通常用于 Windows Vista UI。 文件格式所有者应准备好以该大小显示其缩略图。 它们还应为反映特定文件内容的缩略图提供非静态图像。 例如,文本文件的缩略图应显示文档的微型版本,包括其文本。

引入了 IThumbnailProvider 接口,以便提供比过去更简单、更直接的缩略图,而 IExtractImage 将改用。 请注意,使用 IExtractImage 的现有代码在 Windows Vista 下仍然有效。 但是,详细信息 窗格中不支持 IExtractImage

本主题讨论以下内容:

缩略图进程

默认情况下,处理程序(包括缩略图处理程序)在单独的进程中运行。 可以通过在调用 IShellItem::BindToHandler 时将 NULL 值作为绑定上下文来强制处理程序在进程内运行,如下所示:

IShellItem::BindToHandler(NULL, BHID_ThumbnailHandler,..)

还可以选择默认退出进程,方法是在注册表中设置 DisableProcessIsolation 条目,如以下示例所示。 类标识符 (CLSID) {E357FCCD-A995-4576-B01F-234630154E96} 是 IThumbnailProvider 实现的 CLSID。

HKEY_CLASSES_ROOT
   CLSID
      {E357FCCD-A995-4576-B01F-234630154E96}
         DisableProcessIsolation = 1

缩略图缓存和大小调整

需要缩略图时,Windows 首先检查图像的缩略图缓存。 如果在缓存中找不到图像,则会调用缩略图提取器。 当映像的上次修改时间晚于缓存中副本的时间时,也会调用它。

此缓存中的缩略图存储在一组离散大小中。 所有大小都以像素为单位提供。

  • 32x32
  • 96x96
  • 256x256
  • 1024x1024

注意

这些值可能会更改。 代码不应假定始终使用任何特定大小。

 

如果图像不是正方形,则不应自行填充图像。 Windows 负责尊重原始纵横比并将图像填充为正方形。

当要求特定大小的图像时,除非找到完全匹配项,否则 Windows Vista 始终检索下一个最大图像并将其缩减到请求的大小。 映像从来不会像以前版本的 Windows 那样纵向扩展。

下表提供了请求大小与可用大小之间的关系的一些示例。

提供的最大图像大小 提取程序请求的大小 你提供
156x120 256x256 156x120 (不要垫,保持纵横比)
2048x1024 256x256 256x128 (请勿垫,保持纵横比)

 

可以将截止点声明为注册表中关联应用的程序 ID 条目的一部分。 在此大小下,不使用缩略图。

HKEY_CLASSES_ROOT
   .{ProgId}
      ThumbnailCutoff

ThumbnailCutoff 条目是以下REG_DWORD值之一。

价值 近路 HighDPI 敏感
0 32x32 是的
1 16x16 是的
2 48x48 是的
3 16x16 是的

高点/英寸(dpi)敏感度意味着缩略图的像素尺寸会自动调整为更大的 dpi。 例如,96 dpi 处的 32x32 图像将是 40x40 图像,分辨率为 120 dpi。

如果未指定 ThumbnailCutoff 条目,则默认截止为 20x20(不区分 dpi)。

缩略图覆盖

缩略图覆盖,在缩略图右下角显示的小型图像,为开发人员提供向缩略图应用品牌标识的机会。 覆盖在注册表中声明为关联应用的程序 ID 条目的一部分,如下所示:

HKEY_CLASSES_ROOT
   .{ProgId}
      TypeOverlay

TypeOverlay 条目包含解释为如下所示的REG_SZ值:

  • 如果值是资源引用(嵌入在 DLL 中的 .ico 文件),例如 ISVComponent.dll,-155,该图像将用作具有该文件扩展名的文件的覆盖层。 请注意,在此示例中,155 是资源 ID,如果标准路径中不存在 DLL(如 C:/Windows/System32),则完整路径是必需的,而不仅仅是 DLL 名称。
  • 如果值为空字符串,则不会对图像应用覆盖。
  • 如果值不存在,则使用关联的应用程序的默认图标。

只能通过此机制提供缩略图的覆盖层,并由 Windows 应用。 不要自行应用覆盖。

缩略图装饰

投影等装饰将基于用户当前选择的主题应用于缩略图。 装饰由 Windows 提供;不要自己创建它们。 Windows 随时可能会更改特定装饰的外观,因此,如果你提供自己的外观,你有可能与系统不同步。 缩略图可能会过时或过时。

潜在的装饰在注册表中声明为关联应用的程序 ID 条目的一部分,如下所示:

HKEY_CLASSES_ROOT
   .{ProgId}
      Treatment

治疗条目包含以下REG_DWORD值之一:

价值 意义
0 无装饰
1 阴影
2 照片边框
3 视频上衣

默认情况下,投影应用于图像。

注册缩略图处理程序

缩略图处理程序的注册基于标准文件关联。

缩略图处理程序 Shell 扩展的 GUID E357FCCD-A995-4576-B01F-234630154E96

IThumbnailProvider

生成缩略图处理程序

缩略图处理程序指南