Objective CVisual Studio 6Visual C++ 7.0Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
增强的CCheckComboBox






4.81/5 (12投票s)
2002年5月2日
2分钟阅读

150127

3913
混合控件,模拟一个带有复选框的下拉树组合框。
引言
我想要一个控件,它既具有组合框的功能,又具有带有复选框的树的功能。这样的控件应该像一个组合框一样显示下拉菜单,同时允许检查和快速检查项目。
当我完成编码时,我看到了 Magnus Egelberg 的“CCheckComboBox
”类,但我意识到我的控件有几个优点,无论如何都需要完全重写该类。
我的实现(一个带有复选框的下拉列表)与其他实现不同,它使用子窗口,而不是弹出窗口。为了更好的通用性,我使用树,让用户通过在编辑框中显示带有工具提示的已选中项目来查看它们。我通过使用所有者绘制按钮来模拟组合框,因此没有直接从 CWnd
或 CComboBox
派生它。我认为这种方法有几个优点。
要在新项目中集成这些类,您需要
- 将文件“Check*”添加到您的项目中
- 在您的表单上,添加一个具有所有者绘制样式的按钮,并将其映射到控件
- 将映射的控件名称更改为“
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 个错误并添加了一个功能。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。