Multi column Combo box (3) | CodeGuru

Multi column Combo box (3)

  Environment: VC++ 4.2 and above, Win95/98 When I saw the article "Multicolumn Combobox" by Jakawan Ratiwanich. Besides issues in comment, I noticed that his program still had three issues. First, items in ComboBox can not be sorted. Second, all items of the selected row are showed in edit control box. Third, if a combo […]

Written By
CodeGuru Staff
CodeGuru Staff
Dec 27, 1999
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

  Environment: VC++ 4.2 and above, Win95/98

When I saw the article "Multicolumn Combobox" by Jakawan
Ratiwanich. Besides issues in comment, I noticed that his program still had three issues.
First, items in ComboBox can not be sorted. Second, all items of the selected row are
showed in edit control box. Third, if a combo box has more than 5 columns, user must
modify the class.

When I saw the article "A Multi Column Combobox(2)" by Mihai Filimon. Besides
issues in comment, I noticed that his program still had other three issues. First, the
class is very complex for normal user to use or modify. Second, it’s not same as normal
combobox class, user must understand how it works before using it. Third, user can hide
key column, but key item selected is showed in edit control box.

So, I want to show you 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
showed 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. You also can control the text color in disabled control.

How user can use this control?

  1. Put an Ownerdraw ComboBox in your resource dialog.
  2. Add new member variables dialog class.
	DDX_Control(pDX, IDC_COMBO1, m_ComboBoxControl1);
	DDX_CBString(pDX, IDC_COMBO1, m_ComboBoxString1);
  1. In message map function OnInitDialog, use FormaComboBox to set m_TotalColumn,
    m_BoundColumnn and m_ShowColumn, this function must be called brfore other function
    called.
	m_ComboBoxControl2.FormatComboBox(2, 0, 1);
  1. Then, use SetColumnWidth to set m_ColumnWidth for each column, use SetColumnAlignStyle
    to set m_ColumnAlignStyle for each column. If default value is used, skip them.
	m_ComboBoxControl2.SetColumnWidth(150, 0);
	m_ComboBoxControl2.SetColumnAlignStyle(DT_LEFT, DT_CENTER);
  1. 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);
  1. 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.

Downloads

Download demo project – 20 Kb
Download source – 5 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.