CImagelist 基本用法

本文介绍了MFC中CImageList类,它封装了图像列表控件功能,用于大规模图标存储,常与其他控件配合提供图标资源。还阐述了向CImageList对象添加图像的两种方法,重点给出从外部文件添加图标和位图的代码及Create函数相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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值。
含义
ILC_COLOR如果没有其它ILC_COLOR* 标记被确定,则使用缺省行为。典型地,缺省为ILC_COLOR4;但对于旧的显示驱动程序,缺省为ILC_COLORDDB
ILC_COLOR4使用4位(16色)设备独立位图(DIB)部分作为图象列表的位图
ILC_COLOR8使用8位DIB部分。彩色表格使用的颜色与半色调调色板的一样
ILC_COLOR16使用16位(32/64K色)DIB部分
ILC_COLOR24使用24位DIB部分
ILC_COLOR32使用32位DIB部分
ILC_COLORDDB使用设备独立位图
ILC_MASK使用掩码。图象列表包含两个位图,其中一个是用做掩码的位图。如果不包括此值,图象列表只包含一个位图
nInitial图象列表最初包含的图象数。
nGrow当系统需要改变列表为新图象准备空间时,图象列表可生成的图象数。此参数替代改变的图象列表所能包含的新图象数。
nBitmapID与图象列表联系的位图的源ID。
crMask用于生成一个掩码的颜色。此指定的位图中的颜色的每个像素变为黑色,掩码中相应位设置为1。
lpszBitmapID包含图象的源ID的字符串。
ImageList1CImageList对象的参考。
nImage1第一个存在的图象的索引。
ImageList2CImageList对象的参考。
nImage2第二个存在的图象的索引。
dx每个图象的尺寸,用像素表示。
dy每个图象的尺寸,用像素表示。


说明:
需要两步构造一个CImageList。首先调用构造函数,然后调用Create,创建图象列表并附加给CImageList对象。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值