网上资料:

CImageList控件:用来保存一组相同大小的图标或位图,它没有图形显示界面,主要用途是为其它控件提供图形列表。可以通过索引访问图标或位图。

CImageList常用的函数有:

函数 说明
Create 创建一个CImageList控件
GetImageCount 获取图像的数目
GetImageInfo 获取图像信息
Add 添加图像到图像列表控件
Remove 从列表中删除图像
Replace 替换列表中指定的图像

例如:

CImageList m_imageList;

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

m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ROOT));  //加载图标

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

树形控件有两个非常重要的数据结构:TV_ITEM和TV_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);

转载于:https://www.cnblogs.com/lxt287994374/archive/2013/02/26/2933010.html

MFC中CImageList(图形列表控件)、CTreeCtrl(树形列表控件)的简单用法相关推荐

  1. pygame 中的图形绘制函数、帧速率和文字相关知识,简单的的不得了

    本系列专栏将通过不断编写游戏的方式,带你夯实 Python 知识. 这篇博客的目的 通过 pygame 内置的函数绘制各种简单的线条图形. 简单的图形包括,矩形.圆形.椭圆形.线条. 先测试最终效果. ...

  2. 【学习总结】MFC(CImagelist)(重绘)(双缓冲)

    双缓冲实现按钮列表 本文通过介绍双缓冲与CImageList,重写CButton类,来实现按钮列表. 简单的效果图 双缓冲实现 双缓冲的技术原理: 在Windows中每一种设备都在内存中有一个设备描述 ...

  3. Halcon初学者知识 【13】如何在MFC中调用Halcon代码

    要知道如何在MFC中调用Halcon代码,需要以下知识点: 在VC++2019的工程中,配置Halcon环境[请看此文] Halcon代码如何导出成C++代码 如何拆解halcon转换成C++的代码, ...

  4. MFC列表控件ListControl和树控件TreeControl

    列表控件 列表相关的类:CListCtrl-父类是CWnd,本质是一个控件: CListView-父类是CView,本质是一个视图.相当于在视图中嵌入了一个CListCtrl控件 列表控件的使用 1. ...

  5. MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  6. MFC中动态创建控件以及添加事件响应

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  7. MFC中动态创建控件及添加消息响应的方法实例

    动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...

  8. MFC中常见控件的操作

    1.下面的代码用于获取屏幕的长度和宽度  int iWidth = GetSystemMetrics(SM_CXSCREEN); // int iHeight = GetSystemMetrics(S ...

  9. mfc c语言 编辑器,语法高亮编辑控件Scintilla在MFC中的简单使用

    项目中要使用代码编辑器,搜索之后,发现了强大的编辑器控件Scintilla. 1.简介 Scintilla是一款开源的语法高亮编辑器控件,官方网站:http://www.scintilla.org/. ...

最新文章

  1. 2021年大数据Flink(二十二):Time与Watermaker
  2. linux上传文件到服务器
  3. git did not exit cleanly(解决办法)
  4. win10固态硬盘分区 整数_惠普HP笔记本Win10改Win7系统教程
  5. 素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...
  6. (35)FPGA打两拍、打三拍设计(第7天)
  7. Android开发笔记(四十二)Broadcast的生命周期
  8. Alarm:IT界朋友请珍惜你的身体[转贴]
  9. OCI 完成 TOB 选举,阿里工程师入选全球 9 人名单
  10. Java程序编写 • 【第4章 程序:随机本周菜品;简易计算器】
  11. 利用melendy插入参考文献_Q基因的转座子插入突变导致去驯化过程中普通小麦重获脆穗性...
  12. song -用函数画彩虹
  13. [补充]上集 Ch. 19-12(AJAX)在ListView / GridView的「样版」里面,放置 UpdatePanel
  14. FAT32 学习及注意事项
  15. JSM jQuery插件开源
  16. 转:如何不断自我提升
  17. 列举5种以上表单元素中input的type类型
  18. c语言传值调用与引用调用
  19. php如何扫描局域网ip,python实现扫描局域网指定网段ip的方法
  20. 易安卓打开Android系统中的解锁方式选择页面(锁屏方式选择)

热门文章

  1. 追女生攻略:怎么才能吸引女生?
  2. Windows安装DB2
  3. 桂林电子科技大学操作系统课程设计(二)
  4. VCS使用Makefile教程
  5. 羊了个羊通关率不到0.1% (这有通关攻略)
  6. java中去除全角和半角空格
  7. Java OFD文件转换,OFD转PDF、图片、SVG、HTML工具类(2.0.0版本之前)
  8. 性能测试的常见瓶颈分析及调优方法
  9. 向日葵Linux版的安装与使用
  10. esxi做文件服务器拒绝,VMware ESXi和ESX “lsassd”服务远程拒绝服务漏洞