TreeCtrl的用法

TreeCtrl的用法(1)

(一)树控件的主要功能,

      树控件和树视图(Tree Control & View)主要用来显示 具有一定层次结构的 数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。树控件中的每个数据项包括“数据项名称的文本字符串”和“用于表示该数据项的图像”,每个数据项下面均可包含各种子项,整个结构就像目录树一样。对于包含各种子项的数据项,可通过鼠标双击来展开或合拢,可以通过控制树的不同风格来实现树控件的不同显示形态。这些风格主要包括:

TVS_HASLINES表示用连线来连接父项和它下面的各个子项,这可以使树的显示层次结构更加清晰,但无父项的各子项之间并没有连线。

TVS_LINESATROOT表示在无父项的各子项 即根下面的各子项 存在连线。

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

TVS_DISABLEDRAGDROP表示禁止对树控件发送TVN_BEGINDRAG消息。

TVS_HASBUTTONS表示在带有子项的父项前增加一个带“+”或“-”按钮,这使得用户可以通过单击这个小按钮来实现子项的展开和合拢,当存在子项时,按钮的初始状态为“+”,当子项被展开时,小按钮由“+”变为“-”,当子项合拢时,小按钮由“-”变为“+”,这一风格对于根项无效,如果需要可通过组合TVS_LINESATROOT风格来实现;TVS_EDITLABELS表示允许让用户单击具有输入焦点的数据项来修改其名称。

      对于树控件,MFC中叶可以2种形式来封装,即树控件(CTREECTRL)和数视图(CTREEVIEW),来满足用户的不同需求,对于一般要求的用户如果在对话框中应用,使用树控件比较方便。而对于具有较高要求的用户,在使用 树视图 时还具有视窗口的各种方便特性,可以更好的满足文档/视结构的要求。当在窗口中使用数视图时,树视图会占满两个窗口的客户区域并自动随框架窗口的调整而调整,并能够很好的处理诸如菜单、加速键、工具条中的各种命令消息。在使用树视图时,只要利用CTreeView的成员函数GetTreeCtrl()取得树控件的一个引用,就可以像操作树控件一样来使用树视图。

(二)树控件的 对象结构

1、树控件的建立方法

(1)定义树控件类的对象CTreeCtrl m_treeCtrl;

(2)调用该对象的Create函数,其调用格式如下:BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);

其中dwStyle用来确定树控件的类型,rect用来确定树控件的大小和位置,pParentWnd用来确定树控件的父窗口,通常为一个对话框,不能为NULL,你ID用来确定树控件的标志。树控件的风格可以是上面介绍的风格的组合。

2、树控件的操作函数

(1)GetCount()取得树控件中项的数目

(2)取得树控件中相对于父项的偏移值GetIndent()

(3)取得树控件图像列表的句柄GetImageList()

(4)取得匹配下一个树项GetNextItem()

(5)判断给定树项是否包含子项ItemHasChildren()

(6)取得树项子项GetChildItem()

(7)取得下一个同属树项GetNextSiblingItem()

(8)取得前一个同属树项GetPrevSiblingItem()

(9)取得父树项GetParentItem

(10)取得第一个可视树项GetFirstVisibleItem()

(11)取得下一个可视树项GetNextVisibleItem()

(12)取得前一个可视树项GetPrevVisibleItem()

(13)取得被选中的树项 GetSelectedItem()

(14)取得根树项GetRootItem()

(15)取得树项的属性GetItem()

(16)设置树项的属性SetItem()

(17)取得树项的状态 GetItemState()

(18)设置树项的状态SetItemState()

(19)取得与树项关联图像GetItemImage()

(20)设置与树项关联图像 SetItemImage()

(21)取得树项文本GetItemText()

(22)设置树项文本SetItemText()

(23)取得树项编辑控件句柄 GetEditControl()

3、树控件的操作方法

      树控件的操作方法包括:

(1)插入一个树项InsertItem()

(2)删除一个树项DeleteItem()

(3)删除所有树项DeleteAllItems()

(4)展开或合拢树项 的子项Expand()

(5)选中特定树项SelectItem()

(6)选择一个树项作为第一个可视树项SelectSetFirstVisible()

(7)编辑一个可视的树 项EditLabel()

(8)排序给定父树项的子树项SortChildren()

(三)与树控件相关的数据结构

      在使用树控件时需要了解两个非常重要是数据结构TV_ITEM和TV_INSERTSTRUCT。前一个数据结构用来表示树控件的树项信息,后一个数据结构是用来定义 将树项增加到树控件中 所需要的树项信息。另外,还需要NM_TREEVIEW、TV_DISPINFO和TV_HITTESTINFO数据结构,这几个数据结构的定义方法如下:

[cpp]  view plain copy
  1. (1)基本数据项结构  
  2. typedef struct _TV_ITEM {  
  3. UINT mask;              //结构成员有效性屏蔽位  
  4. HTREEITEM hItem;        //数据项控制句柄  
  5. UINT state;             //数据项状态  
  6. UINT stateMask;         //状态有效性屏蔽位  
  7. LPSTR pszText;          //数据项名称字符串  
  8. int cchTextMax;         //数据项名称的最大长度  
  9. int iImage;             //数据项图标索引号  
  10. int iSelectedImage;     //选中数据项图标索引号  
  11. int cChildren;          //子项标识  
  12. LPARAM lParam;          //程序定义的32位数据  
  13. }          
  14. TV_ITEM, FAR *LPTV_ITEM;  
  15. (2)插入树项结构  
  16. typedef struct _TV_INSERTSTRUCT   
  17. {   
  18. HTREEITEM hParent;      //父项控制句柄  
  19. HTREEITEM hInsertAfter; //插入树项的位置  
  20. TV_ITEM item;           //数据项的结构  
  21. }   
  22. TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;  
  23. 说明:如果插入位置是TVI_FIRST或TVI_LAST,则分别插入到树控件的最前面或最后面,如果是TVI_SORT,则插入的树项自动插入到合适的位置。  
  24. ③树控制通知消息结构   
  25. typedef struct _NM_TREEVIEW  
  26. {  
  27. NMHDR    hdr;     //通知消息句柄  
  28. UINT     action;  //通知消息标志  
  29. TV_ITEM  itemOld; //原来的数据结构  
  30. TV_ITEM  itemNew; //新的数据结构  
  31. POINT    ptDrag;  //拖动指针  
  32. } NM_TREEVIEW;  
  33. ④取得或设置数据结构  
  34. typedef struct _TV_DISPINFO   
  35. {  
  36. NMHDR   hdr;      //通知消息控制句柄  
  37. TV_ITEM item;     //数据项结构  
  38. } TV_DISPINFO;  
  39. ⑤指针测试数据结构  
  40. typedef struct _TVHITTESTINFO   
  41. {   
  42. POINT     pt;     //客户区域屏幕坐标指针  
  43. UINT      flags;  //存放测试结果的变量  
  44. HTREEITEM hItem;  //测试的数据项结构  
  45. } TV_HITTESTINFO, FAR *LPTV_HITTESTINFO;  
  46.  其中flags测试结果可以是如下值:  
  47.     TVHT_ABOVE        在客户区域上面  
  48.     TVHT_BELOW        在客户区域下面  
  49.     TVHT_NOWHERE      在客户区域中并在最后一项下面  
  50.     TVHT_ONITEM       在与树项关联的位图或标签内  
  51.     TVHT_ONITEMBUTTON 在与树项关联的按钮上  
  52.     TVHT_ONITEMICON   在与树项关联的位图上  
  53.     TVHT_ONITEMINDENT 在与树项关联的联线上  
  54.     TVHT_ONITEMLABEL  在与树项关联的标签上  
  55.     TVHT_ONITEMRIGHT  在树项的右侧区域中  
  56.     TVHT_ONITEMSTATEICON 在用户定义的状态图标上  
  57.     TVHT_TOLEFT       在客户区域的左侧  
  58.     TVHT_TORIGHT      在客户区域的右侧  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值