通常向CImageList对象中添加图像元素的方法是:首先把图标或位图调入资源文件中,然后调用CImageList:Add方法加入到图象列表控件中,将位图装入资源导致可执行文件增大,不利于软件发行,而且只能使用资源中有限的位图,无法选取其它位图。要弥补使用资源位图的不足,就必须直接使用BMP位图文件。
使用下列代码即可实现:
HBITMAP hBitmap;
CBitmap *pBitmap;
CImageList *pImageList;
pImageList=new CImageList;
pImageList->Create (32,32,ILC_COLOR4,5,2);
pBitmap=new CBitmap;
hBitmap=(HBITMAP)LoadImage(NULL,FilePathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//FilePathName 是位图文件完整路径字符串
pBitmap->Attach (hBitmap);
pImageList->Add (pBitmap,RGB(0,0,0));
下面结合一个实例详细说明的用法:
例程解析:
例程基于一个对话框,单击对话框中的‘添加bmp’按钮弹出文件选择框,选择一个bmp文件,即可把选种bmp文件加入到列表控件中。在MFC中,CLIstCtrl类封装了列表控件,主要用来以各种方式显示一组数据记录供用户进行各种操作,列表中的记录可以包括多个数据项,也可以包括表示数据内容的大小图标,用来表示数据记录的各种属性,Windows资源管理器的右侧框架就是一个非常典型的列表控件。
新建MFC AppWiazrd[exe]工程,工程名称ImageListAddBmp,点OK,选中Dialog based 点下一步,剩下的几步用缺省值,一直按下一步直到完成,工程建立完毕。按以下步骤设置几个变量,填写事件代码:
1. 在IDD_IMAGELISTADDBMP_DIALOG对话框中加入ClistCtrl控件和一个按纽,按纽Caption为“添加bmp”。
2. 使用类向导添加CtrlList控件变量m_ListCtrl。
3. 在CimageListAddBmpDlg类中添加下面两个公用变量:
int index;
CImageList *pImageList;
4. 在BOOL CImageListAddBmpDlg::OnInitDialog()初始化函数中,
// TODO: Add extra initialization here语句后面添加以下代码
index=0;
pImageList=new CImageList;
pImageList->Create (32,32,ILC_COLOR4,5,2);
m_ListCtrl.SetImageList (pImageList,LVSIL_NORMAL );
5. 在IDD_IMAGELISTADDBMP_DIALOG对话框中双击‘添加bmp’按钮,加入Onbutton1单击事件代码:
void CImageListAddBmpDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString FilePathName,FileName;
CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName();
HBITMAP hBitmap;
CBitmap *pBitmap;
pBitmap=new CBitmap;
hBitmap=(HBITMAP)LoadImage(NULL,FilePathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pBitmap->Attach (hBitmap);
pImageList->Add (pBitmap,RGB(0,0,0));
FileName=dlg.GetFileName ();
m_ListCtrl.InsertItem (index,FileName,index);
index++;
}
}
到这里你可以编译运行了,在VC6.o下编译通过。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/