分类: C/C++
2008-08-04 09:30:58
二、使用树控制
在MFC中,树控制被封装成CTreeCtrl类。下面我们谈谈树控制的创建、属性和操作方法。
(1) 树控制的创建
树控制一般用于对话框程序。创建树控制有两种方法,一种是静态创建,一种是动态创建。静态创建是指拖放控件后声明与之相关的成员变量来操作树控制。在对话框程序界面上拖放一个CTreeCtrl控件,然后通过ClassWizard添加一个CTreeCtrl类型的成员变量并在程序中使用它。动态创建是指在程序中使用Create函数创建树控制对象。本文例子采用静态创建的方法。
(2) 树控制的属性
树控制有很多属性操作函数。使用这些函数可以得到树控制的各种属性信息。例如:取得树控制中项数GetCount、取得树控制中项相对于父项的偏移值GetIndent、取得树控制图像列表控制句柄GetImageList等。具体信息可以查看MSDN帮助。
(3) 数控制的操作
树控制的操作方法包括插入一个树项InsertItem、删除一个树项DeleteItem、删除
所有树项DeleteAllItems、展开或合拢树项的子项Expand、选中特定树项
SelectItem、选择一个树项作为第一个可视树项SelectSetFirstVisible、编辑一个可
视的树项EditLabel和排序给定父树项的子树项SortChildren等。
三、让树控制支持数据项查找功能
在有些场合下用户需要在树控制中添加新的数据项。新添加的数据项可能和已有的某数据项名称重复。为避免这种情况,我们需要一个函数它能够在添加新数据项之前先检查所有的数据项,如果查到包含新添加数据项名称的数据项已存在,可以向用户提示该信息。使用递归方法来实现该函数相对简单。
下面是该函数的原型、参数及代码。
/*************************************************************** * * 名称:FindItem * * 功能:在树控制中根据数据项名称查找数据项 * * 参数:item - 要查询的数据项及其子数据项 * * strText - 要查询的数据项名称 * * 返回值:NULL - 没找到 * * (非空的HTREEITEM ) - 找到 * ***************************************************************/ HTREEITEM CTreeCtrlEx::FindItem(HTREEITEM item, CString strText) { HTREEITEM hFind; if(item == NULL) return NULL; while(item!=NULL) { if(GetItemText(item) == strText) return item; if(ItemHasChildren(item)) { item = GetChildItem(item); hFind = FindItem(item,strText); if(hFind) { return hFind; } else { item= GetNextSiblingItem(GetParentItem(item)); } } else { item = GetNextSiblingItem(item); if(item==NULL) return NULL; } } return item; }四、示例程序
控制名称 | 标题名称 | 标识符号 | 对应成员变量或函数 |
树控制 | IDC_MYTREE | CTreeCtrl m_ctrlTree | |
按钮 | 新建数据项 | IDC_ NEWITEM |
OnNewitem() |
树控制项目 | HTREEITEM m_hInsertItem |