visual c++中树视图控件(Tree Control)
树视图控件(Tree Control)
树视图控件表示有层次关系的事物或能够进行分类划分的对象。树型视图控件中每个项目(Item,又称作节点)由项目名称和一个可选择的图标组成,其中的项目分为父项目和子项目。父项目位于子项目的上层,如图1所示。

在图1中,“中华人民共和国”称为根项目;“吉林”和“辽宁”称为“中华人民共和国”的子项目;“中华人民共和国”是“吉林”和“辽宁”的父项目;“辽宁”是“铁岭”的父项目;“铁岭”是“辽宁”的子项目,以此类推。
有关树视图的结构有几个,其中,编程时经常使用的结构是TVITEM结构和TVINSERTSTRCT结构。TVITEM用于定义项目(Item);TVINSERTSTRCT结构用于定义插入项,在TVINSERTSTRCT结构中包含了一个TVITEM结构成员,因此,这个属性实际上包含了要插入项目的属性。下面是这两个结构的定义及说明。
typedef struct tagTVITEM{
UINT mask; //说明成员中哪些成员有效
HTREEITEM hItem; //项目句柄
UINT state; //状态
UINT stateMask; //状态有效的屏蔽位
LPTSTR pszText; //项目文本
int cchTextMax; //pszText所指向的缓冲区大小
int iImage; //当项目没有选中时,关联图像列表的图像索引值
int iSelectedImage; //当项目被选中时,关联图像列表的图像索引值
int cChildren; //插入项的父项句柄
LPARAM lParam; //程序定义的32位参数
} TVITEM, FAR *LPTVITEM;
typedef struct tagTVINSERTSTRUCT {
HTREEITEM hParent; //插入项的父项的句柄
HTREEITEM hInsertAfter; //插入处上一项的句柄或位置标志值
TVITEM item; //插入的项目
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;
在使用树视图控件时,经常需要重新设置它的有关属性,例如:Hasbuttons表示父项目的前面有一个“+”或“−”号;HasLines表示用连线体现项目之间的层次关系;Lines at root表示在项目最高层用连线将项目与根项目连接;Edit Labels表示可以编辑项目的名称;Check boxes表示项目的左侧有一个复选框;Single expand表示单击项目可以展开或折叠该项目。
封装视图的MFC类是CTreeCtrl类,这个类中常用的成员函数如表1所示。

表1 CTreeCtrl类中常用的成员函数