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

多列组合框

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.52/5 (11投票s)

1999年12月1日

2分钟阅读

viewsIcon

436976

downloadIcon

9018

一个多列、可定制、可编辑的组合框

  • 下载演示项目 - 22 KB
  • 下载演示文件 - 6 Kb

    你想要

    • 一个多列组合框吗?
    • 每列一个标题吗?
    • 控制禁用组合框控件中的文本颜色吗?
    • 在组合框的编辑控件中显示/编辑“描述”,并获取“id”吗?
    • 像普通组合框一样对项目进行排序吗?

    如果你的所有答案都是肯定的,你可以使用我的类 CMultiColumnComboBox,它用于我的项目中。它是一个所有者绘制的组合框类,从 CComboBox 类派生而来,但它非常易于使用。如上所示,它的工作方式与普通的组合框完全相同。无论组合框有多少列,你都不需要修改该类。你可以设置要显示的列,并从 BoundColumn 获取文本,即使组合框是“下拉”类型或“简单”类型。当你在“下拉”或“简单”组合框的编辑框中键入字符时,项目在 ShowColumn 中搜索,而不是 BoundColumn,但结果在 BoundColumn 中。如果你不喜欢组合框禁用时的灰色文本颜色,你可以更改其颜色。

    如何使用此控件

    1. 在你的资源对话框中放置一个所有者绘制的组合框,将 MultiColumnCpmboBox.cpp 和 MultiColumnComboBox.h 复制到你的工作区或项目的目录中,并在你的 CPP 文件的顶部插入以下行。
          #include MultiColumnComboBox.h
      
    2. 在对话框类中添加新的成员变量。
          DDX_Control(pDX, IDC_COMBO1, m_ComboBoxControl1);
          DDX_CBString(pDX, IDC_COMBO1, m_ComboBoxString1);
      
    3. 在消息映射函数 OnInitDialog 中,使用 FormaComboBox 设置 m_TotalColumn、m_BoundColumnn 和 m_ShowColumn,此函数必须在调用其他函数之前调用。
          m_ComboBoxControl2.FormatComboBox(2, 0, 1);
      
    4. 然后,使用 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");
      
    5. 使用 CMultiColumnComboBox::AddRow 代替 CComboBox::AddString 将一行添加到组合框的列表框中。
          m_ComboBoxControl2.AddRow(ColumnString1, ColumnString0);
          m_ComboBoxControl4.AddRow(ColumnString0, ColumnString1, 
              ColumnString2, ColumnString3);
      
    6. 如你所见,现在你可以像使用普通的组合框一样使用它。

    注释

    SetColumnWidth、SetColumnAlignStyle 和 AddRow 函数可以使用可变数量的参数调用。你可以修改 AddRow 以使其像 Printf 一样工作。
    如果你需要更多帮助,请随时联系我。

  • © . All rights reserved.