1.综述
在MFC中CImageList类封装了图像列表控件的功能,图像列表是一个具有相同大小的图像(可以是不同类型)的集合,其主要用于应用程序中大规模图标的存储。该控件是不可见的,通常与其它如CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl一起使用,为他们提供图标资源。
图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式。实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。
2.添加图像的两种方法
通常可以向CImageList对象中添加位图和图标资源。其资源可以是程序中资源文件中的资源,也可以直接从外部文件调入。
// 创建一个CImageList类的指针变量
CImageList* pImageList;
pImageList = new CImageList();
pImageList->Create(32, 32, ILC_COLOR32, 0, 4); // 必不可少 第四个参数为初始设置数像个数,
//第五个参数为如果初始不够,每次
// 增加个数
// 添加图标,图标可以随图像列表大小自动拉伸
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
// 添加位图,并使黑色为透明色,如果图像列表大小和位图大小不一致可能会导致天添加失败
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1)
pImageList->Add(&bmp, RGB(0, 0, 0));
bmp.DeleteObject();
bmp.LoadBitmap(IDB_BITMAP2)
pImageList->Add(&bmp, RGB(0, 0, 0));
(2)从外部文件中添加图标和位图图像代码如下所示(这种方法可以是可执行程序更小,便于发行)
HBITMAP hBitmap;
CBitmap *pBitmap;
CString FilePathName = "e:/TIME.bmp";
pBitmap = new CBitmap;
//从文件导入位图
HBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pBitmap->Attach(hBitmap);
m_pImageList->Add(pBitmap, RGB(0,0,0));
CImageList::Create
BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );
BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREFcrMask );
BOOL Create( CImageList& ImageList1, int nImage1, CImageList& ImageList2, int nImage2, int dx, int dy );
返回值:如果成功,则返回非零值,否则为0。
参数:
cx | 每个图象的尺寸,以像素为单位。 | ||||||||||||||||||
cy | 每个图象的尺寸,以像素为单位。 | ||||||||||||||||||
nFlags | 确定创建的图象列表类型。此参数可能为以下值的组合,但只能有一个ILC_COLOR值。
| ||||||||||||||||||
nInitial | 图象列表最初包含的图象数。 | ||||||||||||||||||
nGrow | 当系统需要改变列表为新图象准备空间时,图象列表可生成的图象数。此参数替代改变的图象列表所能包含的新图象数。 | ||||||||||||||||||
nBitmapID | 与图象列表联系的位图的源ID。 | ||||||||||||||||||
crMask | 用于生成一个掩码的颜色。此指定的位图中的颜色的每个像素变为黑色,掩码中相应位设置为1。 | ||||||||||||||||||
lpszBitmapID | 包含图象的源ID的字符串。 | ||||||||||||||||||
ImageList1 | CImageList对象的参考。 | ||||||||||||||||||
nImage1 | 第一个存在的图象的索引。 | ||||||||||||||||||
ImageList2 | CImageList对象的参考。 | ||||||||||||||||||
nImage2 | 第二个存在的图象的索引。 | ||||||||||||||||||
dx | 每个图象的尺寸,用像素表示。 | ||||||||||||||||||
dy | 每个图象的尺寸,用像素表示。 |
说明:
需要两步构造一个CImageList。首先调用构造函数,然后调用Create,创建图象列表并附加给CImageList对象。