中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 位图操作
如何向CImageList中加入位图文件
作者:dog333 时间:2001-10-04 09:55 出处:互联网 责编:chinaitpower
              摘要:如何向CImageList中加入位图文件
 

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

通常向CImageList对象中添加图像元素的方法是:首先把图标或位图调入资源文件中,然后调用CImageListAdd方法加入到图象列表控件中,将位图装入资源导致可执行文件增大,不利于软件发行,而且只能使用资源中有限的位图,无法选取其它位图。要弥补使用资源位图的不足,就必须直接使用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对话框,FALSESAVE 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下编译通过。

源代码可以发email来索取。

email:ljf518@163.net

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有