Download demo project (James Twine's version) - 26 KbDownload source files (James Twine's version) - 8 Kb
Download demo project (Mark Jackson's version) - 18 KbDownload source files (Mark Jackson's version) - 2 Kb
James Twine originally based this code on earlier work by Baldvin Hansson.
Mark Jackson (www.mjsoft.co.uk) has expanded this to add a "Custom..." option at the bottom of the list which displays the
standard colour picker dialog, and has also added DDX data exchange. The code has also been improved and tidied up in many other ways.
CColorPickerCB class implements a Combobox
that displays colors as well as the name of the colors. Colors may be added or
removed at runtime, and the control can be queried for the
value, or the name of the selected color. You can also set the selected color.
The control correctly handles selection, enabled and disabled
drawing. Since the control uses strings for display, the colors can be sorted.
To use this control, create a Drop List Combobox with the
Owner Draw Fixed and Has Strings styles. Attach a
CColorPickerCB to the control, and off you go!
The initialization routine populates the color picker with a
color selection that is a subset of the X11 colorset, and are the colors that
are recognized by IE.
Note that the control will use 1/4 (one fourth) of its width
for the color block, and the rest, minus a few pixels, for the color text. Be
sure you make it wide enough.
Thanks to Marcel Galema for finding a bug with my inverted
(selected) color usage, and suggesting a fix for it.
Thanks also to Paul Wardle for providing DDX routines.
Here is a list of public functions in the
COLORREF GetSelectedColorValue(void); // Get Selected Color Value
CString GetSelectedColorName(void); // Get Selected Color Name
void SetSelectedColorValue(COLORREF crColor); // Set Selected Color Value
void SetSelectedColorName(PCSTR cpColor); // Set Selected Color Name
// Initialize The Control With The Default Colorset
void InitializeDefaultColors( void );
bool RemoveColor(PCSTR cpColor); // Remove Color From List
bool RemoveColor(COLORREF crColor); // Remove Color From List
int AddColor(PCSTR cpName, COLORREF crColor); // Insert A New Color