VC程序使用CImageList类

要说CImageList类已经不是第一次接触了,这个类在一些VC程序里面经常会用到。

小弟在下面总结了一些自己用到的情况:

 

首先在*.h头文件里面加入CImageList类的定义:

CImageList m_ImgList;

然后在类的实现*.cpp里面使用下面的代码创建CImageList链表:

//创建CImageList对象 m_ImgList.Create(16,16,ILC_COLOR24,11,0); //设置背景色 m_ImgList.SetBkColor(RGB(255,255,255)); //图标数组 UINT nIconID[]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5,IDI_ICON6,IDI_ICON7,IDI_ICON8,IDI_ICON9,IDI_ICON10,IDI_ICON11}; //依次将图标ID加入链表 for (int index=0;index<11;index++) { m_ImgList.Add(AfxGetApp()->LoadIcon(nIconID[index])); }   

在MFC里面很多控件类都有SetImageList这个函数,这个函数可以使图标和控件类关联在一起。只不过每个控件的具体实现不一样,参数也不一样。

下面是CListCtrl这个控件类的实现:

m_ListCtl.SetImageList(&m_ImgList,LVSIL_SMALL);

实现之后列表框的效果,看起来还不错:

 

除此之外有些InsertItem函数也有一个nImage的参数,这个参数是一个int类型的变量。所以我们要将图标同时插入的时候,只要在这个函数里面指定一下图标在CImageList链表里面的索引之就OK了!

//Tab控件的一种使用形式 SetImageList(&m_ImgList); UINT idx = 0; for (idx = 0; idx < m_nNumOfPages; idx++) { m_pPages[idx]->Create(m_IDD[idx], this); InsertItem(idx, m_Title[idx],idx); //第三个idx参数就是nImage参数 } //Tree控件的一种使用形式 m_TreeCtrl.SetImageList(&m_ImgList,TVSIL_NORMAL); HTREEITEM hItem1=m_TreeCtrl.InsertItem(_T("1级子节点01"),0,1,hRoot); //参数0,1也是nImage参数,分别代表两个nImage索引 CString strText; for (int index=0;index<=50;index++) { strText.Format(_T("%d"),index); strText=_T("1级子节点")+strText; m_TreeCtrl.InsertItem(strText,0,1,hRoot); }

 

CImageList类还可以用在其它的场合,比如在基于对话框的工具栏的实现、树形列表的实现、Tab的实现等等,可以说使用范围非常广泛了!

下面看一下小弟实现的几种形式:

 

Tree控件的效果,比如说实现像QQ这样的软件的时候可以尝试一下:

 

 

Tab控件的效果,个人感觉有点像浏览器的选项卡,所以搞了一下看看效果:

 

 

发现自己自从上次经过了福昕的笔试之后就再也不惧查文档了,可能是那次的一下午的经历让我喜欢上MSND了吧!

这两天在看一个视频,当然上面的也是视频里面的例子,只不过为了不让自己忘记,写一下感受。

你可能感兴趣的:(VC++/MFC/.Net)