65.9K
CodeProject 正在变化。 阅读更多。
Home

CTreeComboBox:支持XML的多行树形组合框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (9投票s)

2004年8月26日

2分钟阅读

viewsIcon

91896

downloadIcon

3454

这个类实现了一个组合框,它从 XML 文件中读取数据,将树形结构显示为下拉窗口,并支持多选。

Sample Image

引言

这篇文章介绍了 CTreeComboBox,它实际上应该被称为 CIconMultilineXmlTreeComboBox

它是一个派生自 CButton 的类,具有两个主要功能

  • XML 文件支持:控件将树形控件显示为下拉窗口。树形控件从 XML 文件加载其数据!
  • 多行编辑框:组合框的编辑框可以具有“多行”样式,以便它可以支持从树中选择多个项目!

其他功能包括

  • 多行版本的项目排序。
  • 树形控件和控件的单行版本都支持图标。

使用代码

在对话框中放置一个所有者绘制的按钮(例如,IDC_MYCOMBO)。

为控件声明一个成员变量。

 CTreeComboBox m_mycombo;

将其分配给按钮(在对话框的 DoDataExchange 方法中)。

DDX_Control(pDX, IDC_MYCOMBO, m_mycombo);

加载一个 XML 文件

 m_mycombo.LoadXml("countries.xml");

甚至更好,加载一个 XML 文件和一个包含树的图像列表的位图。

 m_mycombo.LoadXml("countries.xml",IDB_TREE);

就是这样! 如果您想获取您选择的数据,请声明一个 CString 变量

 CString m_text;

并将其分配给控件(在对话框的 DoDataExchange 方法中)。

 DDX_Text(pDX, IDC_MYCOMBO, m_text);

备注

如果按钮的高度大于 32,则组合框将自动变为多行,否则它将是一个正常的单行组合框。

位图的第一个图标,充当图像列表,被该类用作文件夹图标。第二个图标用于展开的文件夹。第三个用于树的叶子。叶子的图标也显示在控件的单行版本的编辑框中。

该控件的多行版本支持对选定项目进行字母排序。您可以使用方法 EnableSort(BOOL) 启用或禁用此功能。

致谢

树形支持基于 Dennis Howard 和 Hai Ha 的基于树的组合框。

XML 文档处理的代码由 Pablo van der Meer 编写。

历史

2004 年 8 月 5 日:第一个版本。

© . All rights reserved.