(Based On Earlier Code That Was By Baldvin Hansson.)
This class, CColorPickerCB, 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 COLORREF value, or the name of the selected color. You can also set the selected color.
The control correctly handles selection, enabled and disabled drawing (see images below of the control is various states). 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!
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.
If you want the source code to make sense, be sure you are set to a Tab size of 4, or the comments and code will not line up correctly.
Any questions or comments, please do not hesitate to EMail me.
Thanx to Marcel Galema for finding a bug with my inverted (selected) color usage, and suggesting a fix for it.
Here is a list of public functions in the CColorPickerCB class:
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 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
)1998 James R. Twine
Last Update: August 25, 1998