Visual studio C++ MFC之树形控件Tree Control
背景
本篇旨在MSDN帮助文档下总结树形控件Tree Control的使用,并列出碰到的具体问题。
正文
树形控件Tree Control的类则是CTreeCtrl,具体成员对象详见链接,以下则描述一些典型应用。
树形控件的创建
当然,所有控件均有两种实现方式,一是在对话框模版中直接将控件Tree Control拖入对应的窗口上,另一种则是通过CtreeCtrl内的成员函数Creat(..)来创建。本文章不想过于繁琐,因此只记录前者。当然也可以根据Creat(...)函数的参数来创建,详见第三部分的关于鸡啄米博客的参考链接。
为了能对添加的树形控件进行操作,因此需要在对应的属性控件添加变量——在对应的窗口的树形控件右击选择添加变量,取一个变量名,此处为m_DevlistTree,至此则由VS自动创建了该控件的控制变量m_DevlistTree。在树形控件上添加元素
调用函数CTreeCtrl::InsertItem(...),此函数有如下几个函数原型;
HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct);
此函数根据结构体LPTVINSERTSTRUCT来添加属性控件元素,结构体如下:
typedef struct {
//插入对应节点下,为TVI_ROOT value 或者 NULL则表示插入的在根节点下。
HTREEITEM hParent;
/*定义按照何种顺序插入属性控件。
TVI_FIRST:在节点下最开头插入元素
TVI_LAST:在节点下最末尾插入元素(当节点下元素特别多的情况下,使用该属性,在添加过程中会导致整个APP卡在此处,直至添加完毕。)
TVI_ROOT:在根节点插入元素
TVI_SORT:按照元素的首字母来排序插入元素
*/
HTREEITEM hInsertAfter;
/*
该Item结构体描述了插入的元素的属性。
*/
TVITEM item;
#endif
} TVINSERTSTRUCT, *LPTVINSERTSTRUCT;
按照Item结构体元素定义的属性来插入元素,如下:
// 本次未使用该函数,待使用的时候再来做详细解释。
HTREEITEM InsertItem(
UINT nMask,
LPCTSTR lpszItem,
int nImage,
int nSelectedImage,
UINT nState,
UINT nStateMask,
LPARAM lParam,
HTREEITEM hParent,
HTREEITEM hInsertAfter);
以下函数很好理解,在根节点的尾部插入文本地址为lpszItem的元素:
HTREEITEM InsertItem(
LPCTSTR lpszItem,
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST);
这个函数,则同样是在根节点的尾部插入文本地址为lpseItem的元素,不同的是,指定了元素图片索引以及元素被选中后的图片索引。
HTREEITEM InsertItem(
LPCTSTR lpszItem,
int nImage,
int nSelectedImage,
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST);
图片的索引操作如下:
// 图标句柄数组
HICON hIcon[3];
// 加载三个图标,并将它们的句柄保存到数组
// 此三个图标为加载进的ICON资源文件
hIcon[0] = theApp.LoadIcon(IDI_ICON0);
hIcon[1] = theApp.LoadIcon(IDI_ICON1);
hIcon[2] = theApp.LoadIcon(IDI_ICON2);
// 创建图像序列CImageList对象
m_imageList.Create(32, 32, ILC_COLOR32, 3, 3);
// 将三个图标添加到图像序列
for (int i=0; i<3; i++)
{
m_imageList.Add(hIcon[i]);
}
// 为树形控件设置图像序列
m_webTree.SetImageList(&m_imageList, TVSIL_NORMAL);
// 至此,0代表IDI_ICON0 1代表IDI_ICON1 2代表IDI_ICON2
// 传入对应的值既可以使对应的元素图标覆盖为对应的图标。
- 将树形控件折叠或者展开:
调用函数Expand(..)可实现,函数如下:
BOOL Expand(
HTREEITEM hItem,
UINT nCode );
/*
hItem: 要操作的Item
nCode: 要执行的操作:
*TVE_COLLAPSE:折叠
*TVE_COLLAPSERESET:折叠并移除所有的该节点下的子节点,必须配合TVE_COLLAPSE使用
*TVE_EXPAND 展开元素
*TVE_TOGGLE 当前为折叠则展开,当前为展开则折叠。
*/
- 获取树形控件的焦点Item
在树形控件右击选择添加事件处理程序,消息类型选择TVN_SELCHANGED,类列表的类选择对应窗口的类,本初的类为CMenueditortestDlg,最后点击添加编辑,生成的代码如下:
void CMenueditortestDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
*pResult = 0;
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
HTREEITEM hItem = m_DevlistTree.GetSelectedItem(); // 获取点击的焦点Item
m_DevlistTree.Expand(hItem, TVE_EXPAND); // 将焦点Item展开
}
以上事件如宏TVN_SELCHANGED(select changed)所描述的一样,当焦点由一个Item换为另外一个Item时,就会进入该处理函数,此处函数内执行的代码的效果既是,鼠标单击到某个Item,对应的Item会被展开。
参考链接
MSDN关于CTreeCtrl的帮助文档。;
鸡啄米的博客VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)详细叙述了该控件的使用。
至此记录完毕。
记录时间:2017-2-15
记录地点:深圳WZ
Visual studio C++ MFC之树形控件Tree Control的更多相关文章
- Visual studio C++ MFC之列表控件CListCtrl Control
背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...
- VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...
- VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)
前面两节为大家讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Control. 树形控件简介 树形控件在Windows系统中是很常见的,例如资源管理器左侧的 ...
- VS2010-MFC(常用控件:树形控件Tree Control 下)
转自:http://www.jizhuomi.com/software/203.html 前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件 ...
- VS2010-MFC(常用控件:树形控件Tree Control 上)
转自:http://www.jizhuomi.com/software/200.html 前面两节讲了列表视图控件List Control,这一节开始介绍一种特殊的列表--树形控件Tree Contr ...
- ELementUI 树形控件tree 获取子节点同时获取半选择状态的父节点ID
使用element-ui tree树形控件的时候,在选择一个子节点后,使用getCheckedKeys 后,发现只能返回子节点的ID,但是其父节点ID没有返回. 解决办法有三种: 1.element ...
- 关于elment-ui树形控件Tree的使用
如果简单使用的tree树形控件,按照Element ui Tree 树形控件 官方文档使用即可,基本上能够完成大部分的需求. 但是如果需要对树形结构进行额外操作,仅仅根据官方文档提供的方案的话,可能就 ...
- (八)树控件(Tree Control),标签控件(tab control)
树控件 基于对话框创建工程 // 01_TreeCtrlDlg.cpp : 实现文件 // #include "stdafx.h" #include "01_TreeCt ...
- 解决Visual Studio 找不到报表控件、rdlc中文乱码
找回报表控件 运行安装程序中的 ..\packages\Reporting Services\RVAddon.msi 工具栏,右键选择ReportViewer,注意选择的版本 如果不能编辑报表文件(. ...
随机推荐
- WN7下安装office2013编辑文档反应这么慢?
把office在高级选项里面“禁用硬件加速”给打勾就OK了. [office 2013密钥] 9MBNG-4VQ2Q-WQ2VF-X9MV2-MPXKV F2V7V-8WN76-77BPV-MKY36 ...
- springBoot Feign Hystrix Dashboard
1.引入依赖 <!-- 引入关于 hystrix Dashboard的依赖 --> <dependency> <groupId>org.springframewor ...
- MVC模型绑定
在项目中使用MVC的时候,我们无需像WebForm那样手动获取值再赋值到Model上,这得益于MVC的模型绑定,下面就介绍下复杂类型的模型绑定 Controller: public class Hom ...
- hdu6059( Trie )
hdu6059 题意 给定数组 \(A\) ,问有多少对下标 \((i, j, k)\) 满足 \(i < j < k\) 且 \((A[i] \ xor \ A[j]) < (A[ ...
- POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)
Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...
- [Atcoder Regular Contest 063] Tutorial
Link: ARC063 传送门 C: 将每种颜色的连续出现称为一段,寻找总段数即可 #include <bits/stdc++.h> using namespace std; ,len; ...
- 【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量
跑出最短路图,然后把结点拆点跑最大流. #include<cstdio> #include<queue> #include<cstring> #include< ...
- 【模拟】洛谷 P1328 NOIP2014提高组 day1 T1 生活大爆炸版石头剪刀布
把所有情况打表,然后随便暴力. #include<cstdio> using namespace std; int n,an,bn,p1,p2; ],b[]; ][]; int ans1, ...
- 【强联通分量缩点】【搜索】bzoj2208 [Jsoi2010]连通数
两次dfs缩点,然后n次dfs暴搜. #include<cstdio> #include<vector> #include<cstring> using names ...
- [OpenJudge8782][划分DP]乘积最大
乘积最大 总时间限制: 1000ms 内存限制: 65536kB [描述] 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛, ...