vc CTreeCtrl控件

本文详细介绍了VC++中的CTreeCtrl控件,主要用于显示层次结构数据,如磁盘目录。内容涵盖建立方法、属性类、操作方法及数据结构。通过不同风格设置,实现树形控件的展示效果,包括插入、删除、选择和编辑树项等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   树控制(CTreeCtrl 主要用来显示具有一定层次结构的数据项 ,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。

   树控制中的每个数据项包 括数据项名称的文本字符串和用于表示该数据项的图像 ,每个数据项下面均可包含各种子项,整个结构就象目录树一样。对于包含各种子项的数据项,可通过鼠标双 击来展开或合拢 ,这可以通过控制树的不同风格 来实现树控制的不同显示形态。

 

1.树控制的建立方法

CtreeCtrl&treeCtrl 建立树控制对象结构   

Create 建立树控制并绑定对象   

树控制CTreeCtrl ::Create的调用格式如下:  

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );   

其中参数dwStyle用来确定树控制的类型;

rect用来确定树控制的大小和位置;

pParentWnd用来确定树控制的父窗口,通用是一个对话框并且不能为NULL;

nID用来确定树控制的标识。树控制的风格可以是下列值的组合:  

TVS_HASLINES 表示树控制在各子项之间存在连线;   

TVS_LINESATROOT 表示树控制在根项之间存在连线;   

TVS_HASBUTTONS 表示树控制视在父项左侧存在展开合拢控制按钮;  

TVS_EDITLABELS 表示可以控制鼠标单击修改树项的名称;  

TVS_SHOWSELALWAYS 表示选中项即使在窗口失去输入焦点时仍然保持选中状态;

TVS_DISABLEDRAGDROP表示禁止树控制发送TVN_BEGINDRAG消息

2.树控制的属性类

树控制属性类包括取得树控制中项数GetCount、

取得树控制中项相对于父项的偏移值GetIndent、

取得树控制图像列表控制句柄 GetImageList、

设置树控制图像列表控制句柄SetImageList、

取得匹配下一个树项GetNextItem、

判断给定树项是否包含子项 ItemHasChildren、

取得树项子项GetChildItem、

取得下一个同属树项GetNextSiblingItem、

取得前一个同属树项 GetPrevSiblingItem、

取得父树项GetParentItem、

取得第一个可视树项GetFirstVisibleItem、

取得下一个 可视树项GetNextVisible Item、

取得前一个可视的树项GetPrevVisibleItem、

取得被选中的树项GetSelectedItem、

取得根树项 GetRootItem、

取得树项的属性GetItem、

设置树项的属性SetItem、

取得树项的状态GetItemState、

设置树项的状态 SetItemState、

取得与树项关联图像GetItemImage、

设置与树项关联图像SetItemImage、

取得树项文本 GetItemText、

设置树项文本SetItemText、

取得树项编辑控制句柄GetEditControl等。

3.树控制的操作方法

树控制的操作方法包括插入一个树项InsertItem、

删除一个树项DeleteItem、

删除所有树项DeleteAllItems、

展开或合拢树 项的子项Expand、

选中特定树项SelectItem、

选择一个树项作为第一个可视树项SelectSetFirstVisible、

编辑一个可视的 树项EditLabel和排序给定父树项的子树项SortChildren等。

4.树控制的数据结构

在使用树控制时需要了解

两个个非常重要的数据结构TV_ITEM和TV_INSERTSTRUCT

前一个数据结构是用来表示树控制的树项信息,

后一个数据结构是用来定义将树项增加到数据控制中所需要的数据内容。

另外,还需要NM_TREEVIEW、TV_DISPINFO和TV_HITTESTINFO三个数据结构,

这几个数据结构的定义方法如下:  

 ①基本数据项结构   

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位数据 } TV_ITEM, FAR *LPTV_ITEM ;   

②插入树项结构   

typedef struct _TV_INSER TSTRUCT {   

HTREEITEM hParent; //父项控制句柄  

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

TV_ITEM item; //数据项的结构 } TV_INSERTSTRUCT , FAR *LPTV_INSERTSTRUCT;   

其中插入的位置如果是TVI_FIRST 或TVI_LAST ,则分别插入到树控制的最前面或最后面,如果是TVI_SORT ,则插入的树项自动插入到合适的位置。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值