在MFC(Microsoft Foundation Classes)中,CImageList类确实有一个名为DrawIndirect的公共方法,用于在设备上下文中绘制图像列表中的图标。以下是CImageList::DrawIndirect方法的简要说明:
BOOL CImageList::DrawIndirect(
   IMAGELISTDRAWPARAMS* pimldp
);

IMAGELISTDRAWPARAMS是一个结构体,包含了绘制图像所需的各种参数,具体如下:
typedef struct _IMAGELISTDRAWPARAMS {
   DWORD cbSize;
   HIMAGELIST himl;
   int i;
   HDC hdcDst;
   int x;
   int y;
   int cx;
   int cy;
   int xBitmap;
   int yBitmap;
   COLORREF rgbBk;
   COLORREF rgbFg;
   UINT fStyle;
   DWORD dwRop;
   DWORD fState;
   DWORD Frame;
   COLORREF crEffect;
} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;

其中主要参数包括:
  •  himl: HIMAGELIST句柄,表示图像列表。

  •  i: 图像列表中的图像索引。

  •  hdcDst: 目标设备上下文的句柄。

  •  x, y: 目标设备上下文中的绘制位置。

  •  cx, cy: 绘制的图像大小。

  •  rgbBk: 图像的背景颜色。

  •  fStyle: 用于指定绘制样式的标志。

  •  dwRop: 用于指定光栅操作代码(Raster Operation Code,ROP2)的标志,控制图像的混合效果。


以下是一个简单的使用示例:
CImageList myImageList;
// ... 初始化 myImageList ...

HDC hdc = GetDC(m_hWnd); // 获取设备上下文

IMAGELISTDRAWPARAMS imldp = {0};
imldp.cbSize = sizeof(IMAGELISTDRAWPARAMS);
imldp.himl = myImageList;
imldp.i = 0;
imldp.hdcDst = hdc;
imldp.x = 10;
imldp.y = 10;
imldp.cx = 32;
imldp.cy = 32;
imldp.fStyle = ILD_NORMAL;
imldp.dwRop = SRCCOPY;

// 在设备上下文中绘制图像列表中的图标
myImageList.DrawIndirect(&imldp);

ReleaseDC(m_hWnd, hdc); // 释放设备上下文

这将在设备上下文中绘制图像列表中索引为0的图标,位置为(10, 10),大小为(32, 32)。CImageList::DrawIndirect方法提供了更多的灵活性,允许通过IMAGELISTDRAWPARAMS结构来传递和控制绘制参数。


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