Click here to Skip to main content
Licence CPOL
First Posted 16 Jan 2000
Views 205,507
Bookmarked 50 times

Color Picker Combo Box

By | 18 Oct 2000 | Article
A combobox derived class that provides a simple color picker
  • Download demo project (James Twine's version) - 26 Kb
  • Download source files (James Twine's version) - 8 Kb


  • Download demo project (Mark Jackson's version) - 18 Kb
  • Download source files (Mark Jackson's version) - 2 Kb
  • Sample Image - ColourPickerCB.gif

    Introduction

    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.

    The 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 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. 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.

    Credits

    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.

    Public Functions

    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
    
    // 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
    

    License

    This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

    About the Author

    James R. Twine

    President
    JRTwine Software, LLC
    United States United States

    Member

    Programming since the age of 10, started professionally at the age of 17. Currently involved in both Client and Server side development on Win32 platforms for MC/HA/FT financial applications. Development experience with Win32, Win16, Linux and other flavors of Unix.
     
    Extensive multithreaded development experience on Windows platforms using the Win32 SDK, and MFC.
     
    Experience with HA/FT n-tiered Client/Server systems as well as GUI apps of varying complexity. Some experience with Game developement.
     
    Having learned that the stuff you can barely get away with doing Client-side apps just does not cut it in the real "Server World", I am amazed how many 'professionals' cannot tell the difference between "works" and "correct" or try to (mis)use VB and/or MFC on server-side development projects, never considering that just because it RUNS, does not mean it runs WELL.
     
    Lastly, I am also a collector of arcade games, and can perform repairs, conversions, etc. Search for my name, you will find me on lots of arcade-related documents and sites.
     
    Sites of interest(?):
    http://www.jrtwine.com
    http://www.jrtwine.com/jtwine
    http://www.signingtime.com
    http://www.deletefxpfiles.com
    http://www.checkfavorites.com
    http://www.coinop.org

    Sign Up to vote   Poor Excellent
    Add a reason or comment to your vote: x
    Votes of 3 or less require a comment

    Comments and Discussions

     
    You must Sign In to use this message board. (secure sign-in)
     
    Search this forum  
     FAQ
        Noise  Layout  Per page   
      Refresh
    Generalexactly what i needed PinmemberEttore Pancini22:00 22 May '12  
    GeneralInitializing dropbox Pinmemberal250015:01 22 Jul '07  
    QuestionAsserttion failed! Pinmemberjrmd2:37 14 Jan '07  
    AnswerRe: Asserttion failed! PinmemberJames R. Twine7:13 14 Jan '07  
    GeneralRe: Asserttion failed! Pinmemberjrmd2:22 15 Jan '07  
    GeneralDoubt Pinmembersruti_p21:11 13 Jun '06  
    AnswerFirst Steps... (Was: Re: Doubt) PinmemberJames R. Twine1:13 14 Jun '06  
    QuestionChanging the Font Pinmemberpscholl22:17 10 May '06  
    AnswerRe: Changing the Font PinmemberJames R. Twine1:15 14 Jun '06  
    AnswerRe: Changing the Font Pinmemberpscholl5:02 27 Feb '07  
    GeneralDebug assertion failed Pinmemberleft1none23:22 6 Feb '06  
    AnswerRe: Debug assertion failed PinmemberJames R. Twine1:16 14 Jun '06  
    GeneralRe: Debug assertion failed Pinmembershvalbo2:22 14 Dec '06  
    GeneralOwner draw combobox with CBS_DROPDOWN style PinmemberG.A.23:18 14 Dec '04  
    GeneralRe: Owner draw combobox with CBS_DROPDOWN style PinmemberJames R. Twine1:18 14 Jun '06  
       The control only supports the CBS_DROPDOWNLIST style of combobox.
     
       Peace!
     
    -=- James
    If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
    Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
    DeleteFXPFiles & CheckFavorites
    (Please rate this post!)
    AnswerRe: Owner draw combobox with CBS_DROPDOWN style PinmemberMember 42633020:12 19 May '09  
    QuestionHow can I use a CComboBox as a Lenght specifier? PinmemberTimawa_6921:00 20 Apr '04  
    AnswerRe: How can I use a CComboBox as a Lenght specifier? PinmemberJames R. Twine14:19 26 Apr '04  
    QuestionCan this combo box be made FLAT Pinmembermangeshb12318:48 16 Oct '03  
    AnswerRe: Can this combo box be made FLAT PinmemberJames R. Twine3:30 17 Oct '03  
    QuestionHow to initialize with my own colors? I'd add few methods.. Pinsussandru1230:16 6 Nov '02  
    AnswerRe: How to initialize with my own colors? I'd add few methods.. PinmemberJames R. Twine6:58 8 Aug '03  
    QuestionHow to Create a ComboBox in toolbar? Pinmemberwhite jungle3:27 16 Nov '01  
    AnswerRe: How to Create a ComboBox in toolbar? PinmemberCarlos Antollini3:50 16 Nov '01  
    GeneralRe: How to Create a ComboBox in toolbar? Pinmembertvhead8017:32 21 Mar '03  

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    Permalink | Advertise | Privacy | Mobile
    Web02 | 2.5.120529.1 | Last Updated 19 Oct 2000
    Article Copyright 2000 by James R. Twine
    Everything else Copyright © CodeProject, 1999-2012
    Terms of Use
    Layout: fixed | fluid