C++ 控件之 CImageList

MFC高级控件之 图像列表控件 图像列表控价与其它控件不同,不能从工具箱的控件面板添加到程序界面中。图像列表控件是一个类:CImageList。要使用该控件,需通过编辑代码实现。该控件用以存储大小相同的一组图像。常使用图像列表控件来为工具条、树状控件、列表控价等的内容设置图标。当然也用可以图像列表将图像绘制到程序中。本文将详细介绍图像列表控件,并以一个的实例演示如何使用图像列表。 阅读详情
图像列表控制(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。 其应用技巧较前两种更加简单,这里不再赘述。
CImageList 图像列表 nGrow 具体解释:图像列表空间不够而继续添加image时,将按照nGrow继续分配空间,设计时根据具体情况设置合适的值,避免内存频繁的改变图像列表,因为过度频繁会使系统记忆体碎片化。但参数到底设置多少,还是要根据实际的情况设置合理的值,一要避免浪费空间,又要避免频繁的对Image容器进行resize操作。nGrow:当初始分配的图像个数不够的时候,新增一个图片时,指定图象列表能增加的新图象个数(难理解);nFlags:创建图像列表的类型,包括4/8/16/24/32/位色; 阅读详情

相关推荐

网络营销推广落地方案(2018最新)

网络营销推广落地方案(2018最新) 导读:如何做网络营销推广引流方案,3个月必成。本文以网络营销推广引流为例向大 家介绍任何一个网络营销推广项目,只要用心执行死磕3个月,只要不是足够努力,百分 百能达成目标,拿到超过期望的结果(成功) 三个月要怎幺熬过? 第一个月:巴网络上大部分做网络营销培训的大师视频和资料都买来,然后用一个月时间学 习看懂,再用自己的语言表达总结出来。 第二个...

kesjc2017的博客 1万+

CImagelist 基本用法

CImagelist 基本用法 CImagelist 基本用法 CImagelist 基本用法

掌握卷积神经网络,从一个简单项目开始

卷积神经网络可以算是深度神经网络中很流行的网络了。本文从基础入手,介绍了卷积网络的基本原理以及相关的其它技术,并利用卷积网络做了一个简单项目作为示例参考。想入手 CNN 的朋友不可错过~ 首先,我们先看看下面这张照片: 图源:Pix2PixHD 这不是一张真实的照片,你可以新建一个窗口来打开它,放大看看,可以看到马赛克。 实际上,这张照片是由 AI 生成的,是不是看起来很真实? 这项技术就是卷积...

hcgx2018的博客 2474

VC++/MFC 的 CImageList 绘制背景透明的位图

文章:https://blog.csdn.net/maoyeahcom/article/details/103827098

ImageList00

<br />1.综述<br />在MFC中CImageList类封装了图像列表控件的功能,图像列表是一个具有相同大小的图像(可以是不同类型)的集合,其主要用于应用程序中大规模图标的存储。该控件是不可见的,通常与其它如CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl一起使用,为他们提供图标资源。<br />图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式。实际上,所有的在同一个图象列

uda1985的专栏 1038

CImageList用法介绍 (zz)

图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。 (一)图像控制的对象结构 ...

weixin_30760895的博客 478

要开始做一个网络的项目了

一个在线环境监测的项目, 监控中心用java编写,接受现场机(用c++写的)发过来的监测数据,并保存到监控中心的数据库中,同时监控中心也要向现场机发送查询命令,如查询通过串口连接现场机的环境检测设备的工作情况等。一个监控中心要同时为多个现场机服务,连接现场机的网络可能是ADSL, GPRS。 很明显这是一个高并发的问题, 我要负责监控中心的程序的编写, 要实现这样的双向通信的要求,...

clarancepeng 163

从 0 开始实现一个 SpringBoot + Vue 项目

从 0 开始实现一个 SpringBoot + Vue 项目

ProgramNovice的博客 4万+

python怎样开始做项目_开始一个项目

一但你安装好了 python,django 和(可选的)数据库及相关库,你就可以通过创建一个project,迈出开发django应用的第一步。项目是 Django 实例的一系列设置的集合,它包括数据库配置、Django 特定选项以及应用程序的特定设置。如果第一次使用 Django,必须进行一些初始化设置工作。新建一个工作目录,例如 E:\djproject\ ,然后进入该目录。在控制台下,转到你创...

weixin_39960319的博客 240

CListCtrl的图片格式 关联CImageList,显示缩略图

将CListCtrl设置成图片格式,然后关联了CImageList,显示图片。其中用了GDI+来缩小图片到指定大小。

从零开始搭建一个Vue项目

Vue.js是现在比较优秀的Web前端框架,下面开始从零开始搭建一个Vue项目。流程如下: 一、安装node.js 1.进入node.js官网下载相应安装包:https://nodejs.org/en/ 安装过程没有什么要注意的地方,直接安装到自己想安装到的目录里面就可以了 2.安装完成以后,打开命令行,输入node -v来判断是否安装成功 3.在安装node的时候...

小虾米的成长之路 8067

如何开始网络创业,怎么开始?做什么?

在互联网的大潮中,要想实现网络创业其实并没有想象中的那么难,很多的普通人在互联网创业成功的例子不胜枚举。 今天主要来谈一谈如何在网络创业 不管是传统行业还是现在的网络创业,其实都要打造好一个落地。 落地是什么呢? 你如果是一个卖醋的,不用你非得建个醋厂,最起码你得有个小卖部,做网络也是一样,你如果想入行,其实和你的学历没有关系,比尔盖茨也只是个大学肄业罢了,“想做”然后找个碗就可以了。 那么又遇到...

shadow0703的博客 1140

手把手教你从零开始做一个好看的 APP

前言 从零开始,手把手带你实现一个「专注睡前的 APP」。睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子、瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完成这个 APP 的原因。APP 的全部代码我已经分享到 Github 上了,需要的直接 点击这里,欢迎 star 和 fork. 在开始写正文之前,先来一波效果的展示,

5652

用python做一个小项目,python做简单小项目

相信大家都知道什么是计算器,如果你已经试过了,还可以尝试利用更高级的 GUI 对它进行改进,让它更接近于当前操作系统中采用的新型计算器。桌面应用也很常见,好的应用可以满足相当大的用户群体。现在几乎每部智能手机都自带一个不同类型的智能助手,它能接收你的语音或文字命令,帮你管理电话、笔记、预约出租车等等,比如谷歌助理、Alexa、Cortana 和 Siri 等。URL 是一切互联网资源的主要导航来源,有时候这些 URL 会包含大量的乱码,短网址生成器能够减少这些 URL 中的字符数,更易于记忆和使用。

a17348的博客 1029

用Python从头开始实现一个神经网络

注:本篇文章非原创,翻译自http://www.wildml.com/2015/09/implementing-a-neural-network-from-scratch/ 点击此处获得代码:本篇文章所有代码均可以iPython notebook的形式在GitHub上获得 在这篇文章中,我们将从头开始实现一个简单的三层神经网络,要实现这个三层神经网络,所要求的数学知识也许你不是都会,但我会试着...

supermouse的博客 6万+
上一篇: C++ 控件之 CHeadCtrl
下一篇: C++控件之 CList
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值