http://blog.csdn.net/bitsjx/article/details/6073596
要说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了吧!
这两天在看一个视频,当然上面的也是视频里面的例子,只不过为了不让自己忘记,写一下感受。