IMAGE LIST

2024-09-06 13:08
文章标签 list image

本文主要是介绍IMAGE LIST,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


  CImageList就是一个容器,用来存储图片资源,方便这些资源被CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl,CListCtrl等使用。

     要使用CImgeList首先要使用它的create函数:

     一般用的比较多的是这一个函数,当然,它还有很多重载,自己可以去翻阅msdn.

      BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );

      cx与cy表示图标的大小,nFlags确定建立图像列表的类型,可以是以下值的组合: ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、 ILC_COLORDDB和ILC_MASK;

      用的较多的是ILC_COLOR32表示颜色数目,自然越多越好,ILC_MASK也很常用,如果不设置这个值,那个图标透明的地方会被黑色填充。

     nInitial指的是初始时list中包含的图片容量,nGrow表示当原来的图片容量用完之后每次添加的新的容量(大于等于1就可以了).

     然后我们就添加图片了,暂时我只说明从程序中资源文件中添加图标这种方法

[cpp] view plain copy print ?
  1.        CImageList *pImage;  
  2. pImage = new CImageList();  
  3. pImage->Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);  
  4. //添加图标  
  5. HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);  
  6. pImage->Add(icon);  
        CImageList *pImage;pImage = new CImageList();pImage->Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);//添加图标HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);pImage->Add(icon);
        然后在要使用图片资源的地方调用SetImageList即可,添加对于该类资源的引用。

      CImageList* SetImageList( CImageList* pImageList, int nImageList );
      其返回值是指向前一个图像列表控件的一个指针,如果不存在前一个图像列表则为NULL;其中参数pImageList是指向图像列表的标识,nImageList是图像列表的类型,可以是如下值:
       LVSIL_NORMAL 用大图标方式进行图像列表;
       LVSIL_SMALL 用小图标方式进行图像列表;

      我们以在CListView为基类的子类中的OnInitialUpdate()函数为例,来看一看如何使用:

[cpp] view plain copy print ?
  1. void CEmailListView::OnInitialUpdate()  
  2. {  
  3.     CListView::OnInitialUpdate();  
  4.   
  5.     //得到内置的listctrl的引用  
  6.     CListCtrl& ctl = GetListCtrl();  
  7.     //获取当前的窗口风格  
  8.     DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);  
  9.     //清除显示方式位  
  10.     dwStyle &= ~LVS_TYPEMASK;  
  11.     //设置报表风格  
  12.     dwStyle |= LVS_REPORT;  
  13.     /* 
  14.     *      
  15.     *     LVS_TYPEMASK    0000011 
  16.     *     LVS_LIST; 
  17.     *     LVS_REPORT; 
  18.     *     LVS_SMALLICON; 
  19.     *     LVS_ICON; 
  20.     */  
  21.     //设置窗口风格  
  22.     ::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);  
  23.   
  24.     //得到扩展风格  
  25.     dwStyle = ctl.GetExtendedStyle();  
  26.     /* 
  27.     *   LVS_EX_GRIDLINES   网格线(只适用与报表风格的listctrl) 
  28.     *   LVS_EX_FULLROWSELECT 整行选中 
  29.     *   LVS_EX_CHECKBOXES   有选中框 
  30.     */  
  31.     dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;  
  32.     //设置扩展风格  
  33.     ctl.SetExtendedStyle(dwStyle);  
  34.     //设置背景颜色  
  35.     ctl.SetBkColor(RGB(255, 255, 255));  
  36.     //设置文本颜色  
  37.     ctl.SetTextColor(RGB(255, 0, 0));  
  38.     //设置边框颜色  
  39.     //ctl.SetBkColor(RGB(0, 0, 255));  
  40.       
  41.       
  42.     ctl.InsertColumn(0, _T("发件人"), LVCFMT_CENTER, 200);  
  43.     ctl.InsertColumn(1, _T("主题"), LVCFMT_CENTER, 260);  
  44.     ctl.InsertColumn(2, _T("时间"), LVCFMT_CENTER, 160);  
  45.       
  46.     pImage = new CImageList();  
  47.     pImage->Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);  
  48.     //添加图标  
  49.     HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);  
  50.     pImage->Add(icon);  
  51.     GetListCtrl().SetImageList(pImage, LVSIL_SMALL);  
  52.   
  53.     GetListCtrl().InsertItem(0, (LPCTSTR)_T("972733802@qq.com"), 0);  
  54.     GetListCtrl().SetItemText(0, 1, (LPCTSTR)_T("天下无不散之筵席"));  
  55.     GetListCtrl().SetItemText(0, 2, (LPCTSTR)_T("2015-01-01"));  
  56.       
  57. }  
void CEmailListView::OnInitialUpdate()
{CListView::OnInitialUpdate();//得到内置的listctrl的引用CListCtrl& ctl = GetListCtrl();//获取当前的窗口风格DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);//清除显示方式位dwStyle &= ~LVS_TYPEMASK;//设置报表风格dwStyle |= LVS_REPORT;/**     *     LVS_TYPEMASK    0000011*     LVS_LIST;*     LVS_REPORT;*     LVS_SMALLICON;*     LVS_ICON;*///设置窗口风格::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);//得到扩展风格dwStyle = ctl.GetExtendedStyle();/**   LVS_EX_GRIDLINES   网格线(只适用与报表风格的listctrl)*   LVS_EX_FULLROWSELECT 整行选中*   LVS_EX_CHECKBOXES   有选中框*/dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;//设置扩展风格ctl.SetExtendedStyle(dwStyle);//设置背景颜色ctl.SetBkColor(RGB(255, 255, 255));//设置文本颜色ctl.SetTextColor(RGB(255, 0, 0));//设置边框颜色//ctl.SetBkColor(RGB(0, 0, 255));ctl.InsertColumn(0, _T("发件人"), LVCFMT_CENTER, 200);ctl.InsertColumn(1, _T("主题"), LVCFMT_CENTER, 260);ctl.InsertColumn(2, _T("时间"), LVCFMT_CENTER, 160);pImage = new CImageList();pImage->Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);//添加图标HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);pImage->Add(icon);GetListCtrl().SetImageList(pImage, LVSIL_SMALL);GetListCtrl().InsertItem(0, (LPCTSTR)_T("972733802@qq.com"), 0);GetListCtrl().SetItemText(0, 1, (LPCTSTR)_T("天下无不散之筵席"));GetListCtrl().SetItemText(0, 2, (LPCTSTR)_T("2015-01-01"));}

注:pImage为指向CImageList的指针.

         效果如下:


    使用CImageList我们经常犯的一个错误是,我们经常这么写:

[cpp] view plain copy print ?
  1. void CEmailListView::OnInitialUpdate()  
  2. {  
  3.     '''''''''''''''''''''''''  
  4.       
  5.     CImageList pImage;  
  6.     pImage.Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);  
  7.     //添加图标  
  8.     HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);  
  9.     pImage.Add(icon);  
  10.     GetListCtrl().SetImageList(&pImage, LVSIL_SMALL);  
  11.   
  12.     '''''''''''''''''''''''''  
  13. }  
void CEmailListView::OnInitialUpdate()
{'''''''''''''''''''''''''CImageList pImage;pImage.Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2);//添加图标HICON icon = AfxGetApp()->LoadIcon(IDI_MAIL);pImage.Add(icon);GetListCtrl().SetImageList(&pImage, LVSIL_SMALL);'''''''''''''''''''''''''
}

  
  这么写的话,我们的程序将看不到图标,很简单的一个道理,因为pImage是一个局部变量,OnInitialUpdate()函数执行完毕之后pImage就已经析构了,哪里还有什么对于图标的引用,解决的办法就是让pImage成为类的成员变量或者让其成为一个指针。
                                    

这篇关于IMAGE LIST的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142094

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

List list = new ArrayList();和ArrayList list=new ArrayList();的区别?

List是一个接口,而ArrayList 是一个类。 ArrayList 继承并实现了List。 List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list=new ArrayList();创建一对象则保留了A

处理List采用并行流处理时,通过ForkJoinPool来控制并行度失控的问题

在使用parallelStream进行处理list时,如不指定线程池,默认的并行度采用cpu核数进行并行,这里采用ForJoinPool来控制,但循环中使用了redis获取key时,出现失控。具体上代码。 @RunWith(SpringRunner.class)@SpringBootTest(classes = Application.class)@Slf4jpublic class Fo

Java中集合类Set、List和Map的区别

Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。那么它们有什么区别呢? Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对

List对象过滤

List materialInventoryList = materialInventories.stream().filter(mat -> mat.getQty().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); stream().filter()方法可以过滤掉List的数据

c++stack和list 介绍

stack介绍 堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。 堆栈作为容器适配器实现,容器适配器是使用特定容器类的封装对象作为其基础容器 的类,提供一组特定的成员函数来访问其元素。元素从特定容器的 “back” 推送或弹出,这称为堆栈的顶部。 stack接口 stack() 构造空的栈 empty() 检测stack是否为

C++——list的实现

目录 0.前言 1.节点类  2.迭代器类  ①普通迭代器 ②const迭代器  ③模板迭代器 3.list类  3.1 clear、析构函数、swap ①clear ② 析构函数  ③ swap 3.2构造函数  ①无参构造  ②赋值构造 3.3 迭代器 3.4插入函数 ①insert插入 ②头插 ③尾插 3.5 删除函数 ①erase删除 ②头删