




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC通用控件编程之CImageList控件 图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。(一)图像控制的对象结构1、图像控制的数据成员m_hImageList 连接图像对象的控制句柄2、图像控制的建立方法CimageListimageList建立图像控制对象结构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, COLORREF crMask );BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2,int nImage2,int dx, int dy );其中各项参数的含义为:cx定义图像的宽度,单位为象素;cy定义图象的高度,单位为象素;nFlags确定建立图像列表的类型,可以是以下值的组合:ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用来确定图像列表包含的图像数量;nGrow用来确定图像列表可控制的图像数量。NbitmapID 用来确定图像列表联系的位图标志值;crMask表示颜色屏蔽位; LpszBitmapID 用来确定包含位图资源的标识串;imagelist1 指向图像列表控制对象的一个指针;nImage1图像列表1中包含的图像数 量;imagelist2指向图像列表控制对象的一个指针;nImage2图像列表2中包含的图像数量;dx表示以象素为单位的图像宽度;dy表示以象素为单位的图像高度。同样,图像控制的建立也包括两个步骤,首先建立图像列表结构,然后建立图像列表控制。3、图像控制的属性类图像控制的属性类包括返回m_hImageList.控制句柄GetSafeHandle、取得图像列表中的图像数量GetImageCount、设置图像列表的背景颜色SetBkColor、取得图像列表的背景颜色SetBkColor和取得图像的有关信息SetBkColor。4、图像控制的操作方法图像控制的操作方法包括将一个图像列表绑定到一个对象上Attach、将对象上的图像列表解除绑定并返回句柄Detach、删除一个图像列表DeleteImageList、将一个图像增加到图像列表中Add和将一个图像从图像列表中删除Remove等。(二)图像控制的应用技巧对于图像控制,同样不能单独使用,必须与列表控制、树控制和标签控制相互结合应用,下面分别介绍其具体应用技巧。1、图像控制在列表控制中的应用技巧设置图像控制CListCtrl:SetImageList的调用格式如下:CImageList* SetImageList( CImageList* pImageList, int nImageList );其返回值是指向前一个图像列表控制的一个指针,如果不存在前一个图像列表则为NULL;其中参数pImageList是指向图像列表的标识,nImageList是图像列表的类型,可以是如下值:LVSIL_NORMAL 用大图标方式进行图像列表;LVSIL_SMALL 用小图标方式进行图像列表;LVSIL_STATE 以图像状态进行图像列表;取得图像控制CListCtrl:GetImageList的调用格式如下:CImageList* GetImageList( int nImageList ) const;其返回值为指向图像列表控制的指针,其中nImageList用来确定取得返回值的图像列表的 值,其取值与设置图像列表函数相同。图像控制在列表控制中的应用示例CImageList Cil1,Cil2; /定义大小图标像列表CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();/取得列表控制程序Cil1.Create(32,32,TRUE,2,2); /建立32位图像控制Cil1.Add(pApp-LoadIcon(IDI_GJ);/增加选中状态图像Cil1.Add(pApp-LoadIcon(IDI_XS);/增加非选中状态图像Cil2.Create(16,16,TRUE,2,2); /建立16位图像控制Cil2.Add(pApp-LoadIcon(IDI_GJ);/增加选中状态图像Cil2.Add(pApp-LoadIcon(IDI_XS);/增加非选中状态图像m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);/设置大图标控制m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);/设置小图标控制2、图像控制在树控制中的应用技巧设置图像控制CTreeCtrl:SetImageList的调用格式如下:CImageList* SetImageList( CImageList * pImageList, int nImageListType );其返回值为指向前前一个图像列表的指针,否则为NULL;参数pImageList为指向图像列表的标识,如果pImageList为NULL则所有的图像都将从树控制中被清除;nImageListType为图像列表设置的类型,可以是如下值之一:TVSIL_NORMAL 设置正常图像列表,其中包括选中和非选中两种图标; TVSIL_STATE 设置图像列表状态,指用户自定义状态;取得图像控制CTreeCtrl:GetImageList的调用格式如下:CImageList* GetImageList( UINT nImage );如果调用成功则返回图像列表控制指针,否则为NULL;nImage为取得返回值的图像列表类型,其取值和取得图像列表控制完全相同。图像控制在树控制中的应用示例CImageList Cil1,Cil2;/定义大小图标像列表CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();/获取应用程序指针Cil1.Create(16,16,ILC_COLOR,2,2);/建立图像控制Cil1.Add(pApp-LoadIcon(IDI_PM);/增加选中状态图像Cil1.Add(pApp-LoadIcon(IDI_CJ);/增加非选中状态图像m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);/设置图像控制列表然后在树控制的结构定义中进行如下设置:TCItem.item.iImage=0; /设置未选中图像索引号TCItem.item.iSelectedImage=1;/设置选中时图像引号3、图像控制在标签控制中的应用技巧设置图像控制CTabCtrl:SetImageList的调用格式CImageList * SetImageList( CImageList * pImageList );其返回值为指向前一个图像列表的指针,如果不存在前一个图像列表则为NULL;pImageList为标识TAB控制的图像列表指针。取得图像控制CTabCtrl:GetImageList的调用格式HIMAGELIST GetImageList() const;其返回值为指向TAB控制的图像列表指针,如果调用不成功则为NULL。其应用技巧较前两种更加简单,这里不再赘述。1.综述在MFC中CImageList类封装了图像列表控件的功能,图像列表是一个具有相同大小的图像(可以是不同类型)的集合,其主要用于应用程序中大规模图标的存储。该控件是不可见的,通常与其它如CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl一起使用,为他们提供图标资源。图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式。实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。2.添加图像的两种方法通常可以向CImageList对象中添加位图和图标资源。其资源可以是程序中资源文件中的资源,也可以直接从外部文件调入。(1)从程序中资源文件中添加图标和位图图像如下所示(通常这是最为简单直观的方法):cpp view plaincopyprint?1. /创建一个CImageList类的指针变量 2. CImageList*pImageList;3. pImageList=newCImageList();4. pImageList-Create(32,32,ILC_COLOR32,0,4);/必不可少 5. 6. /添加图标,图标可以随图像列表大小自动拉伸 7. pImageList-Add(AfxGetApp()-LoadIcon(IDI_ICON1);8. pImageList-Add(AfxGetApp()-LoadIcon(IDI_ICON2);9. 10. /添加位图,并使黑色为透明色,如果图像列表大小和位图大小不一致可能会导致天添加失败 11. CBitmapbmp;12. bmp.LoadBitmap(IDB_BITMAP1)13. pImageList-Add(&bmp,RGB(0,0,0);14. bmp.DeleteObject();15. bmp.LoadBitmap(IDB_BITMAP2)16. pImageList-Add(&bmp,RGB(0,0,0);(2)从外部文件中添加图标和位图图像代码如下所示(这种方法可以是可执行程序更小,便于发行)cpp view plaincopyprint?1. HBITMAPhBitmap;2. CBitmap*pBitmap;3. CStringFilePathName=e:/TIME.bmp;4. pBitmap=newCBitmap;5. /从文件导入位图 6. 7. HBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,8. 9. IMAGE_BITMAP,0,0,LR_LOADFROMFILE);10. pBitmap-Attach(hBitmap);11. m_pImageList-Add(pBitmap,RGB(0,0,0);这样一个图像列表控件就创建好了,并且已经添加了图像,接下来就可以在其它控件中使用其中的图像。通常需要调用SetImageList(m_pImageList)将当前图像列表设置为引用图像源。利用CImageList加载图片文件,然后在CTreeCtrl中作为图标显示.CImageList m_imageList;m_imageList.Create(16,16,ILC_COLOR32 | ILC_COLORDDB | ILC_MASK, 10, 2);CString filePath = _T(d:test.jpg);CBitmap * pBitmap = new CBitmap; HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, filePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); /hBitmap不为空啊 if ( NULL != hBitmap ) pBitmap-Attach(hBitmap); m_ImageList.Add(pBitmap, RGB(255, 255, 255); m_treeCtrl.SetImageList(&m_ImageList); CImageList和CListCtrl的结合显示缩略图CListCtrl使用详解 1。先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style:DWORD SetExtendedStyle( DWORD dwNewStyle );其中LVS_EX_CHECKBOXES表示添加CheckBoxLVS_EX_FULLROWSELECT表示选择整行LVS_EX_GRIDLINES表示添加表格线如果设置了LVS_EX_CHECKBOXES属性,则可以用BOOL GetCheck( int nItem ) const;来得到某一行是否Checked。可以先用下面的语句来删除以前的东西:for(int k=2;k=0;k-)/注意要从后往前删,否则出错m_ListCtrl.DeleteColumn(k);m_ListCtrl.DeleteAllItems();用下面的语句新建列:m_ListCtrl.InsertColumn(0,_T(文件名),LVCFMT_IMAGE|LVCFMT_LEFT);m_ListCtrl.InsertColumn(1,_T(仪器类别);m_ListCtrl.InsertColumn(2,_T(项目类别);其中LVCFMT_IMAGE表示可以在第一列加入图标。如果不要图标可以删去。然后设置列宽:for(j=0;j3;j+)m_ListCtrl.SetColumnWidth(j ,100);以下为列表加入图标,如果不需要图标,可以跳过这一步。注意只在第一次加入,如果多次加入会出错!先在头文件中加入声明:CImageList m_ImageList;这是必要的,如果在cpp的某个函数中加入由于生命期结束,CImageList自动释放,则效果是列表中看不到图标,只看到一个白方块。下面生成CImageList,并将其绑定到CListCtrl中,这是CImageList中还没有图标,只是一个容器:static int flag=2;if(flag=2)/只调用一次SetImageList,否则出错m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1);m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);flag=(flag+1)%2;如果CListCtrl已经用过,曾经加过图标进去,这时就要删除上次放进m_ImageList中的Imagefor(int kk=0;kkm_ImageList.GetImageCount();kk+)m_ImageList.Remove(k);下面介绍如何向CListCtrl里面加入行,并同时为每一行动态加入图标:假设m_listRowCount为要加入的行数。CBitmap* bitmap;bitmap=new CBitmapm_list1rowCount;HBITMAP hbitmap;for(int i = 0; i Create (200,200,ILC_COLOR32,20,20);/前两个参数是设置图象大小的m_pImgList-SetBkColor(RGB(125,125,0);m_list.SetImageList(m_pImgList,0);/将设置的位图列表选入ListView中去/打开对话框添加图片/char m_szFilter = bmp files(*.bmp)|*.bmp|jpg files(*.jpg)|*.jpg|png files(*.png)|*.png|tiff files(*.tiff)|*.tiff|All files(*.*)|*.*|;CFileDialog fd(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, m_szFilter);BOOL nResult = (fd.DoModal() = IDOK) ? TRUE : FALSE;if (!nResult) / 点击cancelreturn;/ 把文件名称放到CStringList中POSITION pos = fd.GetStartPosition();while (pos)CString currentFileName = fd.GetNextPathName(pos);/m_picNameList.AddTail(fileName);/*显示位图文件*/HBITMAP hBitmap;CBi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司对相关方管理制度
- 浪潮项目风管安装技术交底
- LDHs对铅锌矿尾矿重金属污染土壤钝化效果研究
- 2025标准设备采购合同范本版本
- 河南省信阳市二校联考2024~2025学年 高三下册5月第一次测试数学试卷附解析
- 2025年中考语文(长沙用)课件:专题4 文学作品阅读
- 安徽省安庆市2024-2025学年高二下册期中考试数学试卷
- 受众需求分析模型构建-洞察阐释
- 2024年陕西延安“优师计划地方专项”师范毕业生招聘真题
- 2024年嘉兴桐乡市教育系统招聘教师真题
- 脑机接口技术在康复医学中的应用与展望
- 学校校区年度工作总结
- 西红柿简介介绍
- 2024-2025北京中考英语真题阅读CD篇
- 2022年上海公务员考试《申论》A卷
- 车辆调度培训课件
- 公司职工书屋借阅制度范本
- 2023年全国高中数学联赛试题参考答案
- 凝血分析的质量控制
- 医院2023年灾害脆弱性分析报告
- 超小型智能液压挖掘机机械结构设计-毕业论文
评论
0/150
提交评论