多列组合框






3.52/5 (11投票s)
1999年12月1日
2分钟阅读

436976

9018
一个多列、可定制、可编辑的组合框
你想要
- 一个多列组合框吗?
- 每列一个标题吗?
- 控制禁用组合框控件中的文本颜色吗?
- 在组合框的编辑控件中显示/编辑“描述”,并获取“id”吗?
- 像普通组合框一样对项目进行排序吗?
如果你的所有答案都是肯定的,你可以使用我的类 CMultiColumnComboBox,它用于我的项目中。它是一个所有者绘制的组合框类,从 CComboBox 类派生而来,但它非常易于使用。如上所示,它的工作方式与普通的组合框完全相同。无论组合框有多少列,你都不需要修改该类。你可以设置要显示的列,并从 BoundColumn 获取文本,即使组合框是“下拉”类型或“简单”类型。当你在“下拉”或“简单”组合框的编辑框中键入字符时,项目在 ShowColumn 中搜索,而不是 BoundColumn,但结果在 BoundColumn 中。如果你不喜欢组合框禁用时的灰色文本颜色,你可以更改其颜色。
如何使用此控件
- 在你的资源对话框中放置一个所有者绘制的组合框,将 MultiColumnCpmboBox.cpp 和 MultiColumnComboBox.h 复制到你的工作区或项目的目录中,并在你的 CPP 文件的顶部插入以下行。
#include MultiColumnComboBox.h
- 在对话框类中添加新的成员变量。
DDX_Control(pDX, IDC_COMBO1, m_ComboBoxControl1); DDX_CBString(pDX, IDC_COMBO1, m_ComboBoxString1);
- 在消息映射函数 OnInitDialog 中,使用 FormaComboBox 设置 m_TotalColumn、m_BoundColumnn 和 m_ShowColumn,此函数必须在调用其他函数之前调用。
m_ComboBoxControl2.FormatComboBox(2, 0, 1);
- 然后,使用 SetColumnWidth 设置每列的 m_ColumnWidth,使用 SetColumnAlignStyle 设置每列的 m_ColumnAlignStyle。如果使用默认值 DT_LEFT,则跳过它。使用 SetColumnTitle 设置每列的标题。如果你不需要标题,则跳过它。
m_ComboBoxControl2.SetColumnWidth(150, 0); m_ComboBoxControl2.SetColumnAlignStyle(DT_LEFT, DT_CENTER); m_ComboBoxControl1.SetColumnTitle("ID", "DESCRIPTION");
- 使用 CMultiColumnComboBox::AddRow 代替 CComboBox::AddString 将一行添加到组合框的列表框中。
m_ComboBoxControl2.AddRow(ColumnString1, ColumnString0); m_ComboBoxControl4.AddRow(ColumnString0, ColumnString1, ColumnString2, ColumnString3);
- 如你所见,现在你可以像使用普通的组合框一样使用它。
注释
SetColumnWidth、SetColumnAlignStyle 和 AddRow 函数可以使用可变数量的参数调用。你可以修改 AddRow 以使其像 Printf 一样工作。
如果你需要更多帮助,请随时联系我。