Click here to Skip to main content
15,881,882 members
Articles / Desktop Programming / MFC
Article

A Multi Column ComboBox

Rate me:
Please Sign up or sign in to vote.
3.52/5 (11 votes)
30 Nov 19992 min read 427.7K   9K   83   68
A multicolumn, customizable, editable combobox
  • Download demo project - 22 Kb
  • Download demo files - 6 Kb

    Image 1 Image 2

    Do you want:

    • a multicolumn  combobox?
    • a title for each column?
    • to control the text color in a disabled combobox control?
    • to show/edit "description" in the edit control of combobox and get "id" instead?
    • to sort items in combobox as normal?

    If all your answers are yes, you can use my class CMultiColumnComboBox used in my project. It is a owner-draw combo box class, derived from class CComboBox, but it's very easy to use. As shown above, it's works exactly like a normal combo box. No matter how many columns a combo box has, you do not need to modify the class. You can set a column to be shown and get text from BoundColumn, even a combo box is "drop down" one or "simple" one. When you key in chars in the edit box of "drop down" or "simple" combo box, items are searched in ShowColumn, not BoundColumn, but the result is in BoundColumn. If you do not like gray color text in your combo box when it's disabled, you can change its color.

    How to use this control

    1. Put an Ownerdraw ComboBox in your resource dialog, copy  MultiColumnCpmboBox.cpp and MultiColumnComboBox.h to the directory of your workspace or project, and insert follow line at top of  your CPP file.
      #include MultiColumnComboBox.h
      
    2. Add new member variables dialog class.
      DDX_Control(pDX, IDC_COMBO1, m_ComboBoxControl1);
      DDX_CBString(pDX, IDC_COMBO1, m_ComboBoxString1);
      
    3. In message map function OnInitDialog, use FormaComboBox to set m_TotalColumn, m_BoundColumnn and m_ShowColumn, this function must be called before other function called.
      m_ComboBoxControl2.FormatComboBox(2, 0, 1);
      
    4. Then, use SetColumnWidth to set m_ColumnWidth for each column, use SetColumnAlignStyle to set m_ColumnAlignStyle for each column. If default value DT_LEFT is used, skip it. Use SetColumnTitle to set title for each column. If you do not want title, skip it.
      m_ComboBoxControl2.SetColumnWidth(150, 0);
      m_ComboBoxControl2.SetColumnAlignStyle(DT_LEFT, DT_CENTER);
      m_ComboBoxControl1.SetColumnTitle("ID", "DESCRIPTION");
      
    5. Use CMultiColumnComboBox::AddRow instead of CComboBox::AddString to add a row to the list box of a combo box.
      m_ComboBoxControl2.AddRow(ColumnString1, ColumnString0);
      m_ComboBoxControl4.AddRow(ColumnString0, ColumnString1,
          ColumnString2, ColumnString3);
      
    6. As you see, now you can use it as a normal combo box.

    Notes:

    Function SetColumnWidth, SetColumnAlignStyle and AddRow can be called with a variable number of arguments. You can modify AddRow to works as Printf.
    If you need more help, free feel to ask me.

  • License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    Written By
    United States United States
    This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

    Comments and Discussions

     
    GeneralNon unique column lists Pin
    Chris Meech20-Jul-01 9:59
    Chris Meech20-Jul-01 9:59 
    GeneralDisplay problem Pin
    30-May-01 2:24
    suss30-May-01 2:24 
    GeneralProblem in Scrolling to the selection with Column header Pin
    Sukanta Majumdar28-Jul-00 9:19
    sussSukanta Majumdar28-Jul-00 9:19 
    GeneralGreat Control-Fix for Win2k Pin
    Steve Palmer27-Jul-00 15:44
    Steve Palmer27-Jul-00 15:44 
    GeneralDisplay problems Pin
    Dave Emmith12-Jul-00 6:59
    sussDave Emmith12-Jul-00 6:59 
    GeneralRe: Display problems Pin
    9-Jan-01 18:09
    suss9-Jan-01 18:09 
    GeneralRe: Display problems Pin
    10-Jan-01 4:38
    suss10-Jan-01 4:38 
    GeneralBug: Scrolling with pressed left mousebutton selects multiple items Pin
    Thomas Ernst26-Jun-00 23:30
    Thomas Ernst26-Jun-00 23:30 
    GeneralBug with Title and only 1 member of list Pin
    Matthew Chase10-Jun-00 10:58
    sussMatthew Chase10-Jun-00 10:58 
    GeneralRe: Bug with Title and only 1 member of list Pin
    Xiao Wu Guang11-Jun-00 20:04
    Xiao Wu Guang11-Jun-00 20:04 
    QuestionHow to get edit text? Pin
    Gregg Morris8-Jun-00 8:23
    Gregg Morris8-Jun-00 8:23 
    GeneralGetBufferSetLength ASSERTS when len=-1 Pin
    Pat Sherrill27-May-00 17:03
    sussPat Sherrill27-May-00 17:03 
    GeneralHEAP exhausted Pin
    Volker Arendt22-May-00 21:35
    sussVolker Arendt22-May-00 21:35 
    GeneralDropdown height and font Pin
    RickL19-May-00 19:36
    RickL19-May-00 19:36 
    GeneralRe: Dropdown height and font Pin
    Xiao Wu Guang11-Jun-00 20:20
    Xiao Wu Guang11-Jun-00 20:20 
    GeneralCorrect compile error in VC++ 6.0 Pin
    Xiao Wu Guang16-May-00 23:06
    Xiao Wu Guang16-May-00 23:06 
    Generalproblem compiling code Pin
    Sivakumar Dakshinamoorthy28-Mar-00 23:35
    Sivakumar Dakshinamoorthy28-Mar-00 23:35 
    GeneralCBN_CLOSEUP event Pin
    Daniel Kaminski22-Jan-00 8:27
    Daniel Kaminski22-Jan-00 8:27 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.