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

增强的CCheckComboBox

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (12投票s)

2002年5月2日

2分钟阅读

viewsIcon

150127

downloadIcon

3913

混合控件,模拟一个带有复选框的下拉树组合框。

Sample Image - CheckCmb.gif

引言

我想要一个控件,它既具有组合框的功能,又具有带有复选框的树的功能。这样的控件应该像一个组合框一样显示下拉菜单,同时允许检查和快速检查项目。

当我完成编码时,我看到了 Magnus Egelberg 的“CCheckComboBox”类,但我意识到我的控件有几个优点,无论如何都需要完全重写该类。

我的实现(一个带有复选框的下拉列表)与其他实现不同,它使用子窗口,而不是弹出窗口。为了更好的通用性,我使用树,让用户通过在编辑框中显示带有工具提示的已选中项目来查看它们。我通过使用所有者绘制按钮来模拟组合框,因此没有直接从 CWndCComboBox 派生它。我认为这种方法有几个优点。

要在新项目中集成这些类,您需要

  1. 将文件“Check*”添加到您的项目中
  2. 在您的表单上,添加一个具有所有者绘制样式的按钮,并将其映射到控件
  3. 将映射的控件名称更改为“CCheckComboBox

要添加一个项目,您需要指定一个标题、一个 ID 和一个级别。根节点的级别为 0(ROOT_LEVEL)。所有其他节点必须以大于 0(ROOT_LEVEL)的级别添加,按照它们在完全展开的树中出现的顺序。 随时可以使用函数“GetCheckedIDs”来获取树的最高级别上所有已选中项目 ID 的 string。 也可以使用函数“GetCheck”来获取已选中的 ID。

// ADD tree items:
m_choCountries.AddString("North America");
    m_choCountries.AddString("USA",    5, ROOT_LEVEL + 2);
    m_choCountries.AddString("Canada", 6, ROOT_LEVEL + 2);
    m_choCountries.AddString("Europe");
    m_choCountries.AddString("UK",     7, ROOT_LEVEL + 2);

// CHECK all items
m_choCountries.CheckAll(TRUE);

// UNCHECK the item with ID = 6
m_choCountries.SetCheck(6, FALSE);

// GET all checked items
CString strCheckedItems = m_choCountries.GetCheckedIDs();

欢迎提出任何改进此类的建议。

历史

  • 2002 年 6 月 6 日 - 我让 CTreeView 单独解释用户按键,并为组合框引入了 OnGetDlgCode 函数。
  • 2002 年 12 月 11 日 - 在此更新中,我修复了 2 个错误并添加了一个功能。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.