树形列表控件






3.86/5 (18投票s)
1999 年 12 月 2 日
3分钟阅读

417542

11429
树控件/列表控件的混合
Treelist
控件是源自 CTreeCtrl
的树/列表组合控件。
以下是所用类的描述
CTLFrame
- 源自CWnd
,此类是treelist
控件的框架类。 它用于包含标头控件、树本身和水平滚动条。CNewHeaderCtrl
- 源自CHeaderCtrl
。 用作TreeList
中的标头。CNewTreeListCtrl
- 源自CTreeCtrl
,用作TreeList
中的主树。CTLItem
- 表示树中的每个项。SSortType
- 用于指示树的排序是升序还是降序以及正在排序的列的结构。
如何将 TreeList 插入您的项目?
- 将以下文件插入到您的项目中
- TLFrame.cpp, TLFrame.h
- NewTreeListCtrl.cpp, NewTreeListCtrl.h
- NewHeaderCtrl.cpp, NewHeaderCtrl.h
- 在应用程序文件(
InitInstance
函数所在的位置)中包含文件 "TLFrame.h",并在InitInstance
函数中插入以下行.... CTLFrame::RegisterClass(); ....
- 在对话框中布局一个用户定义的控件,控件应插入其中。 在类字段类型中: "
LANTIVTREELISTCTRL
" - 在对话框的头文件中包含 "TLFrame.h",并添加一个成员变量:
CTLFrame m_wndMyTreeList;
- 在您的
OnInitDialog()
或OnCreate()
函数中,子类化该控件.... m_wndMyTreeList.SubclassDlgItem(IDC_TREE_LIST, this); // IDC_TREE_LIST is the ID of the user-defined control you // inserted into the dialog
....
就是这样!
使用 TreeListCtrl
控件的使用很简单。 这是一个树,所以把它当做一个树来对待(HTREEITEM
等)。 此外,还有诸如 InsertColumn
, SetItemText
, SetItemColor
, SetItemBold
, GetItemText
等函数。
实现
这是我实现 TreeList
的方法。 首先,我必须创建一个框架窗口,它将包含 3 个对象:标头、树和水平滚动条。 这就是 CTLFrame
的用途。 此外,这个派生自 CWnd
的类在滚动过程中有所帮助:标头在重新定位后会被裁剪,因此会有滚动的效果。
创建类 CNewHeaderCtrl
只是为了在其中放置 3D 三角形。 我决定包含排序,因为在 9/10 的情况下都需要它,而且每个程序员都需要自己插入它是一种耻辱。 最后,CNewTreeListCtrl
是更复杂的部分。 树中的每个项都具有与之关联的 DWORD
数据,该数据存储指向 CTLItem
类的指针。 CTLItem
存储有关每个项目的信息 - 其列的字符串、项目是否为粗体、项目的颜色以及用户希望与项目关联的项目数据。 为了使用 CTLItem
技术,所有处理项目的函数,如 InsertItem
、DeleteItem
、SetItemText
等都被覆盖。
我在滚动部分遇到了一些困难,因为滚动条有很多不同的条件:垂直滚动条显示,然后水平滚动条变短; 如果它被隐藏,那么水平滚动条应该再次变大; 如果用户更改了某些列的大小会发生什么... 以及诸如此类的问题。 我相信我处理了这些情况中的每一种,所以我认为这部分不会有任何问题。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。