• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

如何向CImageList中加入位图文件

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 25次 | 进入软件测试论坛讨论

领测软件测试网 在MFC中CImageList类封装了图象列表控件的功能,图象列表控件是相同大小图象的一个集合,用于应用程序中大规模图标的存储,该控件是不可见控件,通常与其它控件一起使用,来为其它控件提供图标资源。图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式,实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。

通常向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/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网