mfc中CImageList的使用简介

2024-04-24 20:32
文章标签 使用 mfc 简介 cimagelist

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

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

一、图像控制的对象结构

1 图像控制的数据成员

m_hImageList 连接图像对象的控制句柄

2 图像控制的建立方法

CimageListimageList建立图像控制对象结构

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_COLORILC_COLOR4ILC_COLOR8ILC_COLOR16ILC_COLOR24ILC_COLOR32 ILC_COLORDDBILC_MASKnInitial用来确定图像列表包含的图像数量;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 图像控制在列表控制中的应用技巧

1.1 设置图像控制CListCtrl::SetImageList的调用格式如下:

CImageList* SetImageList( CImageList* pImageList, int nImageList );

其返回值是指向前一个图像列表控制的一个指针,如果不存在前一个图像列表则为NULL;其中参数pImageList是指向图像列表的标识,nImageList是图像列表的类型,可以是如下值:

LVSIL_NORMAL 用大图标方式进行图像列表;

LVSIL_SMALL 用小图标方式进行图像列表;

LVSIL_STATE 以图像状态进行图像列表;

1.2 取得图像控制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 图像控制在树控制中的应用技巧

2.1 设置图像控制CTreeCtrl::SetImageList的调用格式如下:

CImageList* SetImageList( CImageList * pImageList, int nImageListType );

其返回值为指向前前一个图像列表的指针,否则为NULL;参数pImageList为指向图像列表的标识,如果pImageListNULL则所有的图像都将从树控制中被清除;nImageListType为图像列表设置的类型,可以是如下值之一:

TVSIL_NORMAL 设置正常图像列表,其中包括选中和非选中两种图标;

TVSIL_STATE 设置图像列表状态,指用户自定义状态;

2.2 取得图像控制CTreeCtrl::GetImageList的调用格式如下:

CImageList* GetImageList( UINT nImage );

如果调用成功则返回图像列表控制指针,否则为NULLnImage为取得返回值的图像列表类型,其取值和取得图像列表控制完全相同。

2.3 图像控制在树控制中的应用示例

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 图像控制在控制中的应用技巧

1.设置图像控制CTabCtrl::SetImageList的调用格式

CImageList * SetImageList( CImageList * pImageList );

其返回值为指向前一个图像列表的指针,如果不存在前一个图像列表则为NULLpImageList为标识TAB控制的图像列表指针。

2 取得图像控制CTabCtrl::GetImageList的调用格式

HIMAGELIST GetImageList() const;

其返回值为指向TAB控制的图像列表指针,如果调用不成功则为NULL

这篇关于mfc中CImageList的使用简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度