从图像列表绘制图像

若要绘制图像,请使用 CImageList::Draw 成员函数。 您将指定指向设备上下文对象的指针、要绘制的图像的索引、要在其中绘制图像的设备上下文中的位置以及一组表示绘制样式的标志。

指定 ILD_TRANSPARENT 样式时,Draw 使用两步过程来绘制一个添加了蒙板的图像。 首先,它对图像的位和蒙板的位执行逻辑“与”操作。 然后对第一次操作的结果和目标设备上下文的背景的位执行逻辑“异或”操作。 此过程会在结果图像中创建透明区域;即蒙板中的每个白色位会使结果图像中相应的位变为透明。

在纯色背景上绘制添加了蒙板的图像之前,应使用 SetBkColor 成员函数将图像列表的背景色设置为与目标一样的颜色。 通过设置颜色,无需再在图像中创建透明区域,而且可使用 Draw 简单地将图像复制到目标设备上下文中,从而显著提升性能。 若要绘制图像,请在调用 Draw 时指定 ILD_NORMAL 样式。

可随时为添加了蒙板的图像的列表 (CImageList) 设置背景色,以便在任何纯色背景上正确绘制。 默认情况下,将背景色设置为 CLR_NONE 会将图像绘制成透明的。 若要检索图像列表的背景色,请使用 GetBkColor 成员函数。

ILD_BLEND25 和 ILD_BLEND50 样式使用系统高亮色为图像递色。 如果您使用一个添加了蒙板的图像来表示一个用户可以选择的对象,那么这些样式会非常有用。 例如,当用户选择某个图像时,可使用 ILD_BLEND50 样式来绘制它。

使用 SRCCOPY 光栅操作将未添加蒙板的图像复制到目标设备上下文中。 不论设备上下文的背景色是什么,图像中的颜色都相同。 在 Draw 中指定的绘图样式对未添加蒙板的图像的外观没有影响。

除 Draw 成员函数之外,另一个函数 (DrawIndirect) 也扩展了渲染图像的能力。 DrawIndirect 采用 IMAGELISTDRAWPARAMS 结构作为参数。 此结构可用于自定义当前图像的渲染,包括光栅操作 (ROP) 代码的使用。 有关 ROP 代码的详细信息,请参阅 Windows SDK 中的光栅操作代码用作画笔的位图

另请参阅

使用 CImageList
Controls