IShellItemImageFactory::GetImage 方法 (shobjidl_core.h)

获取表示 IShellItemHBITMAP。 默认行为是加载缩略图。 如果当前 IShellItem 没有缩略图,它将检索项图标的 HBITMAP 。 如果当前未缓存缩略图或图标,则会提取该缩略图或图标。

语法

HRESULT GetImage(
  [in]  SIZE    size,
  [in]  SIIGBF  flags,
  [out] HBITMAP *phbm
);

参数

[in] size

类型: SIZE

一个 结构,指定要接收的图像的大小。

[in] flags

类型: SIIGBF

以下一项或多项:

SIIGBF_RESIZETOFIT (0x00000000)

根据需要收缩位图以适应大小,保留其纵横比。

SIIGBF_BIGGERSIZEOK (0x00000001)

如果调用方想要拉伸返回的图像本身,则由调用方传递。 例如,如果调用方传递图标大小为 80x80,则可能会返回 96x96 缩略图。 如果调用方需要拉伸图像,则可以将此操作用作性能优化。 请注意, IShellItemImageFactory 的 Shell 实现执行 GDI 拉伸 blit。 如果调用方希望图像拉伸质量高于通过该机制提供的图像拉伸质量,则应传递此标志并自行执行拉伸。

SIIGBF_MEMORYONLY (0x00000002)

仅当项已位于内存中时,才返回该项。 即使该项已缓存,也不要访问磁盘。 请注意,仅返回已缓存的图标,如果项具有尚未缓存的每个实例图标,则此图标可以回退到每个类的图标。 检索缩略图(即使已缓存)始终需要访问磁盘,因此,如果不传递SIIGBF_MEMORYONLY,则不应从 UI 线程调用 GetImage

SIIGBF_ICONONLY (0x00000004)

仅返回图标,不返回缩略图。

SIIGBF_THUMBNAILONLY (0x00000008)

仅返回缩略图,不返回图标。 请注意,并非所有项都有缩略图,因此在这些情况下 ,SIIGBF_THUMBNAILONLY 将导致方法失败。

SIIGBF_INCACHEONLY (0x00000010)

允许访问磁盘,但只允许检索缓存的项。 这会返回缓存的缩略图(如果可用)。 如果没有缓存的缩略图可用,它将返回缓存的每个实例图标,但不提取缩略图或图标。

SIIGBF_CROPTOSQUARE (0x00000020)

在 Windows 8 中引入。 如有必要,请将位图裁剪为正方形。

SIIGBF_WIDETHUMBNAILS (0x00000040)

在 Windows 8 中引入。 将位图拉伸并裁剪为 0.7 纵横比。

SIIGBF_ICONBACKGROUND (0x00000080)

在 Windows 8 中引入。 如果返回图标,请使用关联应用的注册背景色绘制背景。

SIIGBF_SCALEUP (0x00000100)

在 Windows 8 中引入。 如有必要,请拉伸位图,使高度和宽度适合给定的大小。

[out] phbm

类型: HBITMAP*

指向一个值的指针,当此方法成功返回时,该值接收检索到的位图的句柄。 调用方负责在不再需要时通过 DeleteObject 释放检索到的资源。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

图标提取可能很耗时。 通常不应从 UI 线程调用此方法,以避免导致该线程变得无响应。 如果设置了 SIIGBF_INCACHEONLY 标志,则可以在 UI 线程上调用 IShellItemImageFactory::GetImage。 但是,如果在缓存中找不到图像,则调用应用程序应准备好启动后台线程以提取图像。 绝不应在 UI 线程上执行提取。

有关如何使用此方法的完整示例,请参阅 使用映像工厂 示例。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h (包括 Shobjidl.h)