图像列表控制(cimagelist)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用windows32位应用程序接口函数api来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。图像列表控制提供了控制图像列表的基本方法,这些方法在windows95及以后版本才能实现。
(一)图像控制的对象结构
1、图像控制的数据成员
m_himagelist 连接图像对象的控制句柄
2、图像控制的建立方法
cimagelist&imagelist建立图像控制对象结构
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。
其应用技巧较前两种更加简单,这里不再赘述。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器