ImageList_DrawEx 是 Win32 API 中用于在指定位置绘制图像列表中的图像的扩展函数,该函数在 Commctrl.h 头文件中声明。

以下是 ImageList_DrawEx 函数的基本信息:
BOOL ImageList_DrawEx(
  HIMAGELIST himl,
  int        i,
  HDC        hdcDst,
  int        x,
  int        y,
  int        dx,
  int        dy,
  COLORREF   rgbBk,
  COLORREF   rgbFg,
  UINT       fStyle
);

参数说明:
  •  himl:源图像列表的句柄。

  •  i:要绘制的图像的索引。

  •  hdcDst:目标设备上下文的句柄,表示图像将被绘制到哪个设备上下文中。

  •  x:目标位置的 x 坐标。

  •  y:目标位置的 y 坐标。

  •  dx:绘制的宽度。

  •  dy:绘制的高度。

  •  rgbBk:背景颜色。

  •  rgbFg:前景颜色。

  •  fStyle:图像的绘制样式,可以是以下值的组合:

  - ILD_BLEND25:使用 25% 的 alpha 混合效果。
  - ILD_BLEND50:使用 50% 的 alpha 混合效果。
  - ILD_BLEND:使用默认的 alpha 混合效果。
  - ILD_FOCUS:在图像周围绘制焦点矩形。
  - ILD_MASK:绘制图像的遮罩而不是彩色图像。
  - ILD_NORMAL:绘制彩色图像。
  - ILD_SELECTED:绘制选择的图像。
  - ILD_SHADOW:在图像的右下角绘制一个阴影。

该函数返回一个 BOOL 类型的值,如果成功,返回值为非零;如果失败,返回值为零。

以下是一个简单的示例代码,演示如何使用 ImageList_DrawEx 函数:
#include <windows.h>
#include <commctrl.h>

int main() {
    // 初始化 Common Controls
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_WIN95_CLASSES; // 或其他需要的标志
    InitCommonControlsEx(&icex);

    // 创建图像列表
    HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 0);

    // 添加图像到图像列表
    HICON hIcon = LoadIcon(GetModuleHandle(NULL), IDI_INFORMATION);
    ImageList_AddIcon(himl, hIcon);
    DestroyIcon(hIcon);

    // 创建绘图设备上下文
    HDC hdc = GetDC(NULL);

    // 在窗口客户区绘制图像列表中的图像
    ImageList_DrawEx(himl, 0, hdc, 20, 20, 16, 16, RGB(255, 255, 255), RGB(0, 0, 0), ILD_NORMAL);

    // 释放绘图设备上下文
    ReleaseDC(NULL, hdc);

    // 释放图像列表
    ImageList_Destroy(himl);

    return 0;
}

在这个例子中,使用 ImageList_Create 函数创建一个图像列表,并使用 ImageList_AddIcon 函数添加一个图像。然后,使用 GetDC 获取屏幕的设备上下文,并调用 ImageList_DrawEx 函数在指定位置绘制图像列表中的图像。最后,通过调用 ReleaseDC 释放设备上下文,并通过调用 ImageList_Destroy 释放图像列表。


转载请注明出处:http://www.zyzy.cn/article/detail/24680/Win32 API/Commctrl.h/ImageList_DrawEx