MFC中CImageList(图形列表控件)和CTreeCtrl(树形列表控件)的简单用法

简介:

    今日康复,感谢自己能有一个好身体!现在是2010-8-17 23:31:47,抬头看不见月亮,但风很爽,如果有月亮,应该能够算得上苏轼所说的“月白风清”了。如此良夜,又学会了两个控件的简单用法,心里很爽啊。

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

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

例如:

CImageList m_imageList;

//创建CImageList对象
m_imageList.Create(16, 16, ILC_COLOR8, 0, 4);
//加载图标
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);




本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2010/08/18/1801946.html,如需转载请自行联系原作者

相关文章
|
6月前
|
区块链
18 MFC - 树控件 CTreeCtrl
18 MFC - 树控件 CTreeCtrl
26 0
|
6月前
|
BI
17 MFC - 列表控件 CListCtrl
17 MFC - 列表控件 CListCtrl
32 0
|
5月前
|
索引
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
43 0
|
6月前
19 MFC - 标签控件 CTabCtrl
19 MFC - 标签控件 CTabCtrl
21 0
|
API 索引
MFC 树形控件CTreeCtrl类
MFC 树形控件CTreeCtrl类
330 0
MFC 树形控件CTreeCtrl类
|
XML 程序员 C语言
Qt编写控件属性设计器2-拖曳控件
一、前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropEvent和dragEnterEvent事件,重新实现这两个事件,对拖曳的对象进行过滤并调用函数实例化该控件,在实例化该控件的同时实例化控件跟随控件以便拉伸调整大小和位置。
880 0
|
程序员 开发工具 C语言
Qt编写自定义控件45-柱状标尺控件
一、前言 这个控件写了很久了,是最早期的一批控件中的一个,和温度计控件类似,都是垂直的进度条,可以设置不同的背景颜色,左侧的刻度也可以自由设定,还提供了动画效果,其实就是开启定时器慢慢的进度到设定的目标值,如果设定的值比当前值大,则递增,反之递减。
1095 0
|
程序员 C语言
Qt编写自定义控件48-面板窗体控件
一、前言 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到,比如温湿度设备面板,有几百个温湿度设备,需要一个容器放置,自动产生滚动条,可以设置面板的固定宽高或者自适应拉伸,其实就是放了表格布局+弹簧来设置。
1238 0
|
开发工具 C语言
Qt编写自定义控件7-自定义可拖动多边形
一、前言 自定义可拖动多边形控件,原创作者是赵彦博(QQ:408815041 zyb920@hotmail.com),创作之初主要是为了能够在视频区域内用户自定义可拖动的多个区域,即可用来作为警戒区域,也可用来其他的处理,拿到对应的多边形坐标集合,本控件的主要难点是如何计算一个点在一个多边形区域内,何时完成一个多边形区域,支持多个多边形。
824 0