使用CImageList的一点心得
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就可以了).
然后我们就添加图片了,暂时我只说明从程序中资源文件中添加图标这种方法
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()函数为例,来看一看如何使用:
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我们经常犯的一个错误是,我们经常这么写:
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成为类的成员变量或者让其成为一个指针。
使用CImageList的一点心得相关推荐
- 新手网站推广邮件群发一点心得
关于邮件群发一点心得 请勿见笑,本人新人啊.新人做法还是比较菜的.说一下邮件群发吧.最近本人下软件不下百次.病毒木马电脑已经是满满一箩筐了,幸好是虚拟机里. 首先收集相关邮件地址这里转一篇文章 营销如 ...
- 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得...
谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...
- mysql数据库管理系统模式_MYSQL命令行模式管理MySql的一点心得
MYSQL命令行模式管理MySql的一点心得 MYSQL命令行模式管理MySql的一点心得 MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个" ...
- 将asp.net1.1的应用程序升级到asp.net2.0的一点心得
将asp.net1.1的应用程序升级到asp.net2.0的一点心得 费了好一袋烟工夫把CommunityServer升级到了Asp.Net2.0平台,一点心得: vs2005可以很方便的帮我们把vs ...
- 使用Webbrowser的一点心得体会
使用Webbrowser的一点心得体会 原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就 ...
- 关于MySQL存储过程异常处理的一点心得
关于MySQL存储过程异常处理的一点心得 参考文章: (1)关于MySQL存储过程异常处理的一点心得 (2)https://www.cnblogs.com/lrl45/p/6037513.html ( ...
- 做互联网产品运营的一点心得
一个网站运营团队大致粗略地可分成三个部门:产品部.设计部和技术部,产品部为核心,设计部和技术部为支撑,如果网站产品较多比如有资讯内容.论坛.博客.SNS等,那产品部会配备好几个人,每人负责一个产品.在 ...
- 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得
这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了.今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean.一个是UpLoad,一个是DownLoad.写得很 ...
- java学不下去能学web安全吗,这半年学习 Web 安全的一点心得体会
原标题:这半年学习 Web 安全的一点心得体会 来自公众号: 信安之路 大家好,我是 Mirror(王宇阳),专科在读的大二学生:接触信安时间不长,大佬多多指教.信安之路成长平台网站开放后我就在双十一 ...
- java听课心得体会,Java初步学习的一点心得体会
从2015年9月份开始接触到java语言,一开始学习并不上心,而且一直在找自学资源,在没有大牛带的情况下,一直拖到2016年3月份,正式开启了我的java自学之路,现在的我还处在刚入门阶段,谈谈自己学 ...
最新文章
- java 变量的线程可见性_Java多线程——变量可见性
- 云炬Android开发笔记 2-2 Android studio项目上传到Github及无法连接Github的问题处理
- java.util.zip.ZipException: error in opening zip file
- H5的Websocket基本使用
- 计算机软件不是出租的主要标的时著作权,著作权中出租权的适用对象有哪些?...
- 万字详解Docker架构原理、功能及使用
- leanote 支持php,Leanote source leanote源码导读
- 高效地获取XMLhttp对象
- 怎么加密高程点_珠峰咋有4个高度?专业测绘科技工作者解读珠峰高程测算过程...
- url伪静态、url重写
- 基于PHP的汉服文化交流平台 毕业设计-附源码240903
- docker 安装redmine,禅道,jira
- 微信开发 完美微信自动转发朋友圈-flutterAndroid
- Conda更新或安装包时出现Verifying transaction: failed+SetupToolsRemoveError
- pythoninterpreter_java-Jython :: PythonInterpreter可以使用哪些模块...
- Linux网络编程8——线程池模型
- arcgis10之生成无背景色的png图片
- 用Ajax+js+jQuery实现无闪烁定时刷新页面 定时刷新
- 【QT】翻金币小游戏·我的学习版
- Intelligent Parking Building