1.树形控件的定义:
树形控件是一种可以分级显示项目列表的窗口,其所含项目以相互关联的方式显示在控件中,通过点击位于某个层次的项目节点可以展开下一层次中从属于该节点的所有项目。树形控件非常适合于管理那些层次较多且相互间隶属关系较为清晰的项目元素。在MFC中,由CTreeCtrl类提供了对树形控件的功能支持。
代码中控件的定义:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专用风格:
TVS_HASLINES 在父/子结点之间绘制连线
TVS_LINESATROOT 在根/子结点之间绘制连线
TVS_HASBUTTONS 在每一个结点前添加一个按钮,用于表示当前结点是否已被展开
TVS_EDITLABELS 结点的显示字符可以被编辑
TVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
TVS_DISABLEDRAGDROP 不允许Drag/Drop
TVS_NOTOOLTIPS 不使用ToolTip显示结点的显示字符
数据结构:树形控件的数据结构
成员方法:
SetImageList()设置与树视控件关联的图像列表
GetCount()返回控件中项目的数量
GetSelectedItem()返回当前选中的项目
GetNextItem()获得满足某种条件的项目
GetChildItem()或GetParentItem()返回一个项目的子项目或父项目
GetNextSiblingItem()或GetPrevSiblingItem()返回下一个或上一个兄弟项
GetRootItem()返回根项目
GetItemText()或SetItemText()用于获取或设置项目的文本串
GetItemData()或SetItemData()获得或设置项目的关联数据
InsertItem()插入一个项目
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。
通过InsertItem()函数可以为其添加数据项,返回的HTREEITEM类型的句柄唯一标识了此添加的项目。该句柄应当妥善保管,只有通过该句柄才能为此项目继续添加子项目。
DeleteItem()删除一个项目
DeleteAllItem()删除所有项
Expand()展开或者折叠项目
2.使用步骤:
开花->结果
过程:
1. 通过获得树的风格,同时定义新的树的风格,设置树的新的风格
2. 定义HTreeItem 数据
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。
HTREEITEM hitem,hsubitem;
hitem = m_CTreeCtrl.InsertItem("root",TVI_ROOT)
hsubitem = m_CTreeCtrl.InsertItem("test",hitem);
hitem = m_CTreeCtrl.InsertItem("parent",TVI_ROOT,hitem);
hitem = m_CTreeCtrl.InsertItem("parent02",TVI_ROOT);
hsubitem = m_CTreeCtrl.InsertItem("chid01",hitem);
hsubitem = m_CTreeCtrl.InsertItem("chid02",hitem,hsubitem);
把果实做好,再嫁接到树枝上
HTREEITEM hRoot,hCur;//树控制项目句柄
TV_INSERTSTRUCT TCItem;//插入数据项数据结构
TCItem.hParent=TVI_ROOT;//增加根项
TCItem.hInsertAfter=TVI_LAST;//在最后项之后
TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDI MAGE;//设屏蔽
TCItem.item.pszText="数据选择";
TCItem.item.lParam=0;//序号
TCItem.item.iImage=0;//正常图标
TCItem.item.iSelectedImage=1;//选中时图标
hRoot=m_TreeCtrl.InsertItem(&TCItem);//返回根项句柄
3.树形控件的消息映射:
作为同用户的接口,树形控件将在不同的动作下发出各种通知消息,可以在控件窗口的消息映射中添加ON_NOTIFY_REFLECT宏或是在控件所在父窗口的消息映射中添加ON_NOTIFY宏来为每一个通知消息指定处理函数。
树形控件中的任何一个项目均可以拥有一个子项目列表,此列表可以随时处于展开或缩起状态。当处于展开状态时,对应的子项目将以缩进方式显示在父项目下;当处于缩起状态时,子项目将不显示。当用户在双击父项目时,相应的子项目列表将自动在展开与缩起状态切换。在子项目列表状态发生改变时和状态改变完成后树形控件将分别发出TVN_ITEMEXPANDING和 TVN_ITEMEXPANDED通知消息。关于其它的通知消息及其具体含义可参见下表:
通知消息 |
消息说明 |
TVN_BEGINDRAG |
开始拖拽操作 |
TVN_BEGINLABELEDIT |
开始编辑标签 |
TVN_BEGINRDRAG |
开始鼠标右键拖拽操作 |
TVN_DELETEITEM |
删除一个指定的项目 |
TVN_ENDLABELEDIT |
结束编辑标签 |
TVN_GETDISPINFO |
获取一个项目的显示信息 |
TVN_ITEMEXPANDED |
子项目列表被展开或收起 |
TVN_ITEMEXPANDING |
子项目列表正将展开或收起 |
TVN_KEYDOWN |
键盘事件 |
TVN_SELCHANGED |
项目的选择发生改变 |
TVN_SELCHANGING |
项目的选择将要发生改变 |
TVN_SETDISPINFO |
通知更新一个项目的信息 |
4.举例:
控件使用举例只是做了个草稿是第一次做,新手。欢迎高手拍砖。