`
hcmfys
  • 浏览: 356385 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ImageList

 
阅读更多

例如:

CImageList m_imageList;

//创建CImageList对象
m_imageList.Create(16, 16, ILC_COLOR8, 0, 4);
//
加载图标

m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ROOT));

然后该CTreeCtrl了,这是一个树形列表控件,提供了分层级结构显示数据的功能。这个控件有可视化的界面,可以通过界面编辑器进行创建,只需要拉到界面上即可;同样也可以通过Create函数创建一个树形列表控件,由于这种方法通常不用,这里不再赘言。另外该控件还有很多树形,如Has ButtonHas Line等,可以在界面编辑器的属性中查看并设置。

树形控件有两个非常重要的数据结构:TV_ITEMTV_INSERTSTRUCT。前者用来描述一个树节点的信息;后者描述要插入树时所需的信息。结构如下:

typedef struct _TV_ITEM {
UINT mask; //
结构成员有效性屏蔽位

HTREEITEM hItem; //
数据项控制句柄

UINT state; //
数据项状态

UINT stateMask; //
状态有效性屏蔽位

LPSTR pszText; //
数据项名称字符串

int cchTextMax; //
数据项名称的最大长度

int iImage; //
数据项图标索引号

int iSelectedImage; //
选中数据项图标索引号

int cChildren; //
子项标识

LPARAM lParam; //
程序定义的32位数据
TVIF_PARAM
} TV_ITEM, FAR *LPTV_ITEM;

typedef struct _TV_INSER TSTRUCT
{
HTREEITEM hParent; //
父项控制句柄

HTREEITEM hInsertAfter; //
插入树项的位置

TV_ITEM item; //
数据项的结构

} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;

使用CImageList可以方便的为CTreeCtrl提供图标。首先设置树形控件的图形列表:

m_treeStruct.SetImageList(&m_imageList,TVSIL_NORMAL);

然后在添加树形列表节点时可以设置节点的选中时图标索引和未选中时的图标索引。如果没有设置,则数据结构会默认为0。数据结构为上面的TV_ITEM

向树形控件中添加根节点

添加根节点是比较麻烦的,具体代码如下:

TVINSERTSTRUCT tvInsert; //定义一个插入结构
HTREEITEM hParent; //
用来保存插入的位置

tvInsert.hParent = NULL; //
设置父节点为空

tvInsert.hInsertAfter = NULL; //
设置之前的节点同样为空

tvInsert.item.mask = TVIF_TEXT; //
设置掩码

tvInsert.item.pszText = _T("
公司"); //要显示的文字为公司

hParent = m_treeStruct.InsertItem(&tvInsert); //
插入树形结构中,并返回插入的位置

有了父节点hParent ,再要插入子节点就方便了:

//添加第一级项目"技术部"
//
参数列表:显示的文字、已选择的图标索引、未选择的图标索引、父节点的HTREEITEM

HTREEITEM h1 = m_treeStruct.InsertItem("
技术部",1,2,hParent);

//添加第一级项目"管理学院"下的子项目,即第二级
m_treeStruct.InsertItem("ERP
",3,4,h1);
m_treeStruct.InsertItem("UI
",3,4,h1);
m_treeStruct.InsertItem("
核心研发组",3,4,h1);

//添加其他第一级项目
m_treeStruct.InsertItem("
销售部",1,2,hParent);

展开树节点:

//展开第一级项目
m_treeStruct.Expand(hParent,TVE_EXPAND);

向选中节点添加子节点:

//获取树形控件选择的项目
HTREEITEM hItem = m_treeStruct.GetSelectedItem();
//
获取选择项目的子项目图像的索引、子项目选择后的图像索引,

//
以便设置新添加的项目索引

int index,selindex;
m_treeStruct.GetItemImage(m_treeStruct.GetChildItem(hItem),index,selindex);
//
插入新的子项目到选择的项目下

m_treeStruct.InsertItem(m_strItem,index,selindex,hItem);
//
展开选择的项目,以便查看新增加的子项

m_treeStruct.Expand(hItem,TVE_EXPAND);

删除选中节点:

//获取树形控件选择的项目
HTREEITEM hItem = m_treeStruct.GetSelectedItem();
//
删除选择的项目以及其下的所有子项

m_treeStruct.DeleteItem(hItem);

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


  (一)图像控制的对象结构


  1、图像控制的数据成员


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


  2、图像控制的建立方法


   CimageListimageList建立图像控制对象结构


   Create初始化图像列表并绑定对象


  图像控制的建立方法如下:


BOOLCreate(intcx,intcy,UINTnFlags,intnInitial,intnGrow);

BOOLCreate(UINTnBitmapID,intcx,intnGrow,COLORREFcrMask);

BOOLCreate(LPCTSTRlpszBitmapID,intcx,intnGrow,COLORREFcrMask);

BOOLCreate(CImageList&imagelist1,intnImage1,CImageList&imagelist2

,intnImage2,intdx,intdy);


  其中各项参数的含义为:cx定义图像的宽度,单位为象素;cy定义图象的高度,单位为象素;nFlags确定建立图像列表的类型,能够是以下值的组合:ILC_COLORILC_COLOR4ILC_COLOR8ILC_COLOR16ILC_COLOR24ILC_COLOR32ILC_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、图像控制在列表控制中的应用技巧


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


CImageList*SetImageList(CImageList*pImageList,intnImageList);

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


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


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


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


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


CImageList*GetImageList(intnImageList)const;

  其返回值为指向图像列表控制的指针,其中nImageList用来确定取得返回值的图像列表的值,其取值和配置图像列表函数相同。


  图像控制在列表控制中的应用示例

CImageListCil1,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,intnImageListType);

  其返回值为指向前前一个图像列表的指针,否则为NULL;参数pImageList为指向图像列表的标识,假如pImageListNULL则任何的图像都将从树控制中被清除;nImageListType为图像列表配置的类型,能够是如下值之一:


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


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


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


CImageList*GetImageList(UINTnImage);

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


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


CImageListCil1,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);

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


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


HIMAGELISTGetImageList()const;

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


  其应用技巧较前两种更加简单,这里不再赘述。

1.综述
MFCCImageList类封装了图像列表控件的功能,图像列表是一个具有相同大小的图像(可以是不同类型)的集合,其主要用于应用程序中大规模图标的存储。该控件是不可见的,通常与其它如CListBoxCComboBoxCComboBoxExCTabCtrl以及CTreeCtrl一起使用,为他们提供图标资源。


图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式。实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。



2.
添加图像的两种方法

通常可以向CImageList对象中添加位图和图标资源。其资源可以是程序中资源文件中的资源,也可以直接从外部文件调入。



(1)
从程序中资源文件中添加图标和位图图像如下所示(通常这是最为简单直观的方法):


//
创建一个CImageList类的指针变量

CImageList*pImageList;
pImageList=newCImageList();
pImageList->Create(32,32,ILC_COLOR32,0,4);//
必不可少


//
添加图标,图标可以随图像列表大小自动拉伸

pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));

//
添加位图,并使黑色为透明色,如果图像列表大小和位图大小不一致可能会导致天添加失败

CBitmapbmp;
bmp.LoadBitmap(IDB_BITMAP1)
pImageList->Add(&bmp,RGB(0,0,0));
bmp.DeleteObject();
bmp.LoadBitmap(IDB_BITMAP2)
pImageList->Add(&bmp,RGB(0,0,0));




(2)
从外部文件中添加图标和位图图像代码如下所示(这种方法可以是可执行程序更小,便于发行)


HBITMAPhBitmap;
CBitmap*pBitmap;
CStringFilePathName="e:/TIME.bmp";
pBitmap=newCBitmap;
//
从文件导入位图


HBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,

IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pBitmap->Attach(hBitmap);
m_pImageList->Add(pBitmap,RGB(0,0,0));




这样一个图像列表控件就创建好了,并且已经添加了图像,接下来就可以在其它控件中使用其中的图像。通常需要调用SetImageList(m_pImageList)将当前图像列表设置为引用图像源。

分享到:
评论

相关推荐

    VB6.0通过ImageList加载资源文件的ICO设置给ToolBar中的按钮

    在VB6.0中,创建具有美观图形界面的应用程序时,常常需要用到ImageList组件来管理图标资源,尤其在ToolBar控件中设置按钮的图标。本文将深入探讨如何使用ImageList加载资源文件中的ICO图标,并将其设置给ToolBar中的...

    VB6 ListView与ImageList实例

    ImageList组件则为ListView提供图标资源,使列表中的项能够显示自定义的图像。在本实例中,我们将深入探讨这两个组件的使用方法及其相互配合的方式。 首先,让我们了解一下ListView控件的基本操作。在VB6中,你可以...

    fmx android-imagelist 获取图片

    在Delphi FMX (FireMonkey) 平台上开发Android应用时,ImageList组件是一个非常重要的工具,用于管理和显示图像资源。本篇文章将深入探讨如何在Android环境下,利用Delphi FMX的ImageList组件来获取并展示图片。 ...

    C#读取ImageList中的图片.rar

    1. 创建ImageList实例:首先,在代码中创建一个ImageList对象,如`ImageList imageList = new ImageList();`。 2. 加载图片:接下来,我们需要加载图片到ImageList中。这可以通过`Add`方法完成,该方法接受Image...

    得C#下ImageList资源文件下的图片

    在C#编程环境中,ImageList是一个非常有用的控件,它主要用于存储和显示图标或小图像,常见于ListView、TreeView等控件中。当你看到其他系统的ImageList中包含了许多你想要的图片时,如何将这些图片提取出来并用到...

    ImageList控件显示QQ头像列表.rar

    在Windows编程领域,ImageList控件是一个非常重要的组件,它被广泛用于管理和显示图标或图像列表。本示例“ImageList控件显示QQ头像列表”着重探讨如何使用这个控件来展示一系列QQ头像。这涉及到Visual Studio开发...

    自动制作imagelist的软件及其c++源代码

    在Windows应用程序开发中, Imagelist 是一个非常重要的组件,它用于存储和管理一系列的小图标,常用于工具栏、状态栏或者树形视图等控件。Imagelist的制作过程通常涉及手动创建和添加图标,这是一项繁琐的工作,...

    toolbar和imagelist搭配做的工具栏

    `toolbar`和`imagelist`组件在其中扮演了重要角色,它们是构建专业级应用程序界面的关键元素。本篇文章将详细探讨如何利用这两个组件来制作一个高效、直观的工具栏。 首先,`toolbar`是一个显示图标按钮的控件,...

    VB使用ImageList显示并叠加图像.rar

    在VB(Visual Basic)编程中,ImageList控件是一个非常实用的工具,它允许开发者集中存储和管理多个图像,然后在各种控件如ListView、TreeView等中显示这些图像。本教程将详细介绍如何在VB中使用ImageList来显示并...

    fmx-android-imagelist获取图片

    "fmx-android-imagelist获取图片"这个主题主要聚焦于如何在Android设备上使用FireMonkey的ImageList组件来加载和显示图片。ImageList组件在FMX中是一个非常实用的工具,它能够存储和管理大量的图像资源,用于按钮、...

    imagelist和listview组合编写的程序菜单

    在Windows编程中,特别是在Visual Basic (VB)环境中, Imagelist 和 Listview 控件是两种非常常用的组件,它们常被用于创建用户界面中的功能菜单或列表视图。在这里,我们将深入探讨如何利用这两个控件组合编写一个...

    jQuery插件 ImageList 整张图片转换为图像列表

    【jQuery插件 ImageList 整张图片转换为图像列表】是一种实用的技术,它允许开发者将一张大图分割成多个小图,然后以列表的形式展示出来。这种技术在网页设计中非常常见,尤其适用于图片轮播、缩略图展示或者创建...

    ImageList和鼠标提示的应用,数据库链接,(VB6.0源代码编写)

    在VB6.0编程环境中,`ImageList`控件是一个非常实用的工具,它允许开发者在应用程序中管理和显示图标。`ImageList`可以用于多种用途,包括为按钮、树视图、列表视图等控件提供图像。在这个项目中,我们将深入探讨...

    imagelist显示图片

    在Windows编程中,`ImageList`是一个非常重要的组件,它用于存储和管理一系列的图像,通常用于控件如树视图、列表视图或者自定义控件中显示图标。在这个场景下,"imagelist显示图片"指的是如何使用`ImageList`来加载...

    c#imagelist

    在.NET Framework中,`ImageList`是Windows Forms控件的一部分,用于存储和管理图标或小图像集合。这个组件常被用在诸如树视图(TreeView)和列表视图(ListView)等控件中,用来显示节点或项的图标。本文将深入探讨...

    ImageList控件应用实例

    ImageList控件应用实例,ImageList控件应用实例 VB

    拼图游戏(带c#源码 ImageList控件 原素材)

    综上所述,"拼图游戏(带c#源码 ImageList控件 原素材)"是一个集成了C#语言、Windows Forms、图像处理、算法设计和用户交互的综合项目,它展示了开发者在多个技术领域的技能和实践。通过学习和分析这个游戏的源码,...

    imagelist控件案例

    Imagelist控件是Windows编程中常见的一种控件,主要用于存储和管理图像,常被用于创建具有图标或图像的用户界面,比如树形视图、列表视图或者自定义控件等。这个“imagelist控件案例”提供的资料显然是为了帮助初学...

    vs2010-imagelist.rar_imagelist_vs2010imagelist_图像拼接_图像拼接 vs2010

    在本文中,我们将深入探讨如何在Visual Studio 2010 (VS2010)环境下使用`ImageList`组件来实现图像的拼接技术。`ImageList`是Windows Forms应用程序中常用的一个组件,用于存储和管理多个图像,通常用于工具栏、状态...

    ImageList.zip

    《VB6 图片浏览器:ImageList.zip 深度解析》 VB6(Visual Basic 6)是一款经典的编程环境,以其简洁的语法和强大的组件库深受开发者喜爱。在这个名为"ImageList.zip"的压缩包中,包含了一个VB6实现的图片浏览器...

Global site tag (gtag.js) - Google Analytics