Subselection Dialog | CodeGuru

Subselection Dialog

Class: CSubSelection Category: Dialog MFC version: 4.2, Unicode: Yes (altough not tested) Often when the user can select some items from a predefined set and has to sort them at the same time, a dialog similar to the one above is used. For instance for selecting a set of fields for a database access or […]

Written By
CodeGuru Staff
CodeGuru Staff
Oct 28, 1998
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

Class: CSubSelection

Category: Dialog

MFC version: 4.2,

Unicode: Yes (altough not tested)

Often when the user can select some items from a predefined set and has to sort them at the same time, a dialog similar to the one above is used. For instance for selecting a set of fields for a database access or for exporting to a file.

The CSubSelectionDlg is derived from CDialog and can be used as a base for your own class. The included sample gives you a sample whith all the possibilities (CMySelectionDlg). You can create your own dialog template, but it needs (at least) two CListBoxes.

Here is a step by step guide for including the CSubSelectionDlg into your project:

1. Add the two files CSubSelectionDlg.h and CSubSelectionDlg.cpp into your project.

2. Make a new dialog resource with the two CListBoxes. You can make one ore both boxes as ‘single’, ‘multiple’ or ‘extended’ selectable.

3. The first CListBox should be made ‘sorted’.

4. Now call the class wizard and make a CDialog (CMySelectionDlg in the sample) derived class attached to your new dialog template.

5. Now change the base class of your new dialog from CDialog to CSubSelectionDlg. Also include the CSubSelectionDlg.h file where needed.

6. Include the following line in your .h file :

	// tell the constructor about the two CListBoxes
	enum { IDD2 = IDC_SELECTION_LIST1, IDD3 = IDC_SELECTION_LIST2 };

and replace the IDC_SELECTION_LIST1 / 2 with the name of your CListbox resource ID.

7. Change the dialog constructor to include these ID’s :

CMySelection::CMySelection(CWnd* pParent /*=NULL*)
	: CSubSelectionDlg(CMySelection::IDD,CMySelection::IDD2,CMySelection::IDD3, pParent)
{
....

8. Now map any buttons etc. to the base class members. Note: None of these mappings are needed, but you will not get the attached functionallity 🙁

	ON_LBN_DBLCLK(IDC_SELECTION_LIST1, OnDblclkSelectionList1)
	ON_LBN_DBLCLK(IDC_SELECTION_LIST2, OnDblclkSelectionList2)
	ON_BN_CLICKED(IDC_MOVEDOWN, OnMovedown)
	ON_BN_CLICKED(IDC_MOVEUP, OnMoveup)
	ON_BN_CLICKED(IDC_EXCLUDE, OnExclude)
	ON_BN_CLICKED(IDC_INCLUDE, OnInclude)
	ON_BN_CLICKED(IDC_SELECTALL, OnSelectAll)

9. Now you can overwrite the virtual functions InitListBox1() and InitListBox2() to give the boxes something to work with.

Now lean back and to enjoy the newest addition to your project. For details refer to the sample below.

Of course there is room for enhancements, like drag and drop, support for icons, or property sheets.

Download demo project – 109 KB

Download source – 4 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.