Introduction
This ComboBox
style control features a nice drop down list with icons and headlines. It's useful if you have a ComboBox
with a limited, pre-defined list of choices that can be grouped into sections. Typical uses are project types, document types, etc.
Screenshots
Screenshots: Sample usages for BitmapPickerComboEx
, taken from my file sync software.
Basic Usage
You'll find three elements in the ComboBox
:
- Headlines (Bold, without icons)
- Items (with Icons)
- Blanks links
Setting It Up
The Control
The ComboBox
control is set up with the usual steps for custom control:
- In the resource editor: Create a
ComboBox
in your dialog. - Use the
OwnerdrawnVariable
and HasStrings
options in the ComboBox
properties - In your *.h file: Add this line "
CBitmapPickerCombo m_Combox;
" - In your *.cpp file: Add this line "
DDX_Control(pDX, IDC_COMBO1, m_Combox);
" in DoDataExchange
. (The number in IDC_COMBO1
may differ. Check the ComboBox
properties.) - Add the files BitmapPickerCombo.cpp and BitmapKeyed.cpp to your project.
The Bitmaps
The control needs bitmaps if you want to display them in the ComboBox
. For each image:
- In the resource editor: Create a
Bitmap
with black background and a key bitmap (of the same object) with white background and black pixels instead of colors. - In your *.h file: Add this line "
CBitmapKeyed bitmap
" (With a different name each time, of course) - Initialize each bitmap with "
bitmap.Init (this, NULL, IDB_YOURIMAGE, IDB_YOURIMAGEKEY);
"
Filling It With Data
Create a Headline
m_Combox.AddBitmap (NULL, "Headline");
Create an Item
m_Combox.AddBitmap (&bitmap, "Item");
(See above for "bitmap".)
Create a Blank Line
m_Combox.AddBitmap (NULL, "");
Handling Invalid Selections
Please note that any of the above line types can be selected by the user. I experimented with making headlines and blank lines non-selectable but that made the selected with cursor keys impossible. I'd recommend to check for an invalid selected (like a blank line) and disable the "OK" button in your dialog in such a case.
Acknowledgements
The code is heavily based on Anneke Sicherer-Roetman's BitmapPickerCombo
(also available on The Code Project). I only made some modifications to make it look nicer, so I can claim only a small part of the credit. Thanks Anneke.
History
- 22nd January, 2009: Initial post