树列表视图控件
Posted
技术标签:
【中文标题】树列表视图控件【英文标题】:TreeListView control 【发布时间】:2011-03-22 00:10:11 【问题描述】:我需要实现与 Process Explorer 中相同的 TreeList 控件。 我是 GUI 新手,没有写过这么复杂的控件。
正如我在 Process Explorer 中看到的,有一个 TreeListWindowClass,其中包含子项: 2 个标题、3 个滚动条(其中一个是不可见的?)和 1 个静态(位于可见滚动条之间)。 据我了解,主控件在其内部绘制所有项目。 我也没有在附加的 dll 中找到 mfcxxx.dll。
问题一:用什么框架比较好? 有:MFC、WTL、纯WinAPI…… 我查看了这个实现http://www.codeguru.com/cpp/controls/treeview/classes/article.php/c13167,并被 cpp 文件中超过 8000 行代码与巨大结构(其中一个包含 80 个成员)混淆。 它是普通的 WinAPI(和没有 ++ 的 C)。 我绝对想使用 OOP 风格。 =)
问题 2: 这个控件的高层设计应该是什么? 你能解释一下这个控件应该如何设计吗?
我的局限:C++、VS10、操作系统:Vista 及更高版本。
提前致谢
【问题讨论】:
这些类库中没有 TreeList 控件。马克·鲁西诺维奇自己做了。 8 KLoc 听起来差不多,它不是一个简单的控件。它是第 3 方工具供应商的热门产品。找到一个用 C++ 编写的会很棘手。 我认为我从未见过用 C++ 编写的、公开出售的本地版本。不过,我见过很多托管的。 汉斯,问题不是 8KLoc,而是旧的编程风格。我对创建自己的控件知之甚少。所以我更喜欢学习以现代方式创建它们(使用类,而不是普通的 C)。 GrahamS 给了我很好的起点。 【参考方案1】:我最近这样做并使用了来自http://www.mimec.org/articles/mfc/mctree 的多列树视图
它相当基本,但它满足了我的需求并且相当紧凑。它提供了一个CColumnTreeView
类,它是CView
的子类——因此它可以与MFC 的标准CDocument/CView 模式一起正常工作。
【讨论】:
谢谢格雷厄姆。这就是我一直在寻找的。span> 不客气!我遇到的唯一潜在问题是CView::OnInitialUpdate()
方法将在CColumnTreeView::OnInitialUpdate
完成之前调用yoursubclass::OnUpdate()
- 所以GetTreeCtrl()
的结果在第一次调用OnUpdate
时无效 - 易于通过添加if (GetTreeCtrl().m_hWnd == NULL) return;
【参考方案2】:
您可以从Process Hacker 的源代码中找到与 Process Explorer 的“树列表视图”完全相同的内容(恕我直言,很多更好。)
【讨论】:
感谢您的链接。它将对其他几项任务很有用。【参考方案3】:Qt 是一个库,它提供了一个功能齐全的QTreeWidget,看起来它符合您的程序要求。
【讨论】:
这看起来像一个树控件,而不是树列表控件。树列表控件是树控件和列表视图或网格控件的组合。 截图是这样的,但是qtreewidget也支持civilnet.cn/book/embedded/gui/qt4/images/settingsviewer.jpg【参考方案4】:DevExpress 有一些出色的树列表控件,但是它们是用 C# 编写的。但是,您可以使用 C++/CLI 或托管 C++ 来定位它们。所以我不确定你是否能够管理你的应用程序。所以也许它可能没有那么有用。
至于免费的树形列表控件,我尽量远离它们,因为存在错误和缺乏支持。
【讨论】:
以上是关于树列表视图控件的主要内容,如果未能解决你的问题,请参考以下文章