在 MFC(Microsoft Foundation Classes)中,CImageList 类确实有 DrawIndirect 方法,用于在设备上下文(Device Context)中绘制图像列表的图像,提供更多的绘制选项。
BOOL DrawIndirect(IMAGELISTDRAWPARAMS* pimldp);

参数 pimldp 是一个指向 IMAGELISTDRAWPARAMS 结构的指针,该结构定义了绘制图像的参数,包括图像列表、图像索引、设备上下文、位置等信息。
struct IMAGELISTDRAWPARAMS
{
    DWORD       cbSize;
    HIMAGELIST  himl;
    int         i;
    HDC         hdcDst;
    int         x;
    int         y;
    int         cx;
    int         cy;
    int         xBitmap;        // x offset from the upperleft of bitmap
    int         yBitmap;        // y offset from the upperleft of bitmap
    COLORREF    rgbBk;
    COLORREF    rgbFg;
    UINT        fStyle;
    DWORD       dwRop;
    DWORD       fState;
    DWORD       Frame;
    COLORREF    crEffect;
};

示例用法:
CImageList myImageList;
// 假设已经创建了图像列表并添加了一些图像

CDC* pDC = GetDC(); // 假设获取到了设备上下文

// 填充 IMAGELISTDRAWPARAMS 结构
IMAGELISTDRAWPARAMS imldp = {0};
imldp.cbSize = sizeof(IMAGELISTDRAWPARAMS);
imldp.himl = myImageList;
imldp.i = 0; // 要绘制的图像索引
imldp.hdcDst = pDC->GetSafeHdc();
imldp.x = 10;
imldp.y = 10;
imldp.cx = 16; // 图像的宽度
imldp.cy = 16; // 图像的高度
imldp.fStyle = ILD_NORMAL; // 图像绘制的样式

// 绘制图像到设备上下文
BOOL result = myImageList.DrawIndirect(&imldp);

ReleaseDC(pDC); // 释放设备上下文

if (result)
{
    // 成功绘制图像
}
else
{
    // 绘制失败
}

上述示例中,DrawIndirect 方法被用于将图像列表中的指定图像以更详细的选项绘制到设备上下文中。


转载请注明出处:http://www.zyzy.cn/article/detail/18292/MFC/CImageList