Click here to Skip to main content
Licence 
First Posted 15 Dec 1999
Views 100,369
Bookmarked 46 times

Office Style Flat ComboBox

By | 15 Dec 1999 | Article
A drop-in replacement combobox that gives your apps the flat Office-style look
  • Download demo project - 46 Kb
  • Download source files - 7 Kb
  • Sample Image - combobox_flatcombo.gif

    This control easily gives your application the Flat Look that is seen in the Microsoft office products. To use the control, simply add the files CCJFlatComboBox.cpp and CCJFlatComboBox.h to your project. You can use Class Wizard to add the CCJFlatComboBox member variables ( you most likely will have to rebuild the .clw file associated with your project ), or just replace any instance of CComboBox , with CCJFlatComboBox .

    Example

    Below is and example of how you might add the control to your project.

    Header file:

    //{{AFX_DATA(CFlatComboDemoDlg)  
    enum { IDD = IDD_FLATCOMBODEMO_DIALOG };  
    CCJFlatComboBox m_DDCombo;  
    //}}AFX_DATA  
    

    Implementation file:

    //{{AFX_DATA_MAP(CFlatComboDemoDlg)  
    DDX_Control(pDX, IDC_DROPDOWN_COMBO, m_DDCombo);  
    //}}AFX_DATA_MAP  
    

    Acknowledgements:

    • Chris Maunder - For letting me use his color picker class, and for his auto-completion code. I made some modifications to the appearance of the control that is used in this demo. My modifications are noted.
    • Gilberto Botaro - For his help with adding auto completion to the CCJFlatComboBox class.
    • Vachik Hovhannissian and Danilo Lax - For help with fixing focus and message handling bugs.
    • Yosh Yamashita - For help with fixing accelerator bug.
    • Shannon McCoy - For suggestions on using ::GetSysColor(...) and ::GetSystemMetrics(...) more efficiently.
    • Todd Brannam - For help with fixing offset bug to use GetSystemMetrics().

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    About the Author

    Kirk Stowell

    CEO
    Codejock Software
    United States United States

    Member



    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
    NewsUpon Reflection Pinmemberhibachirat14:39 2 Feb '06  
    First of all, thanks. This class helped me beautify an old application.
     
    However, i ran into a problem with message reflection (not happening). I often use OnKillFocus in the a CComboBox's parent window (Dialog) to handle data updates and after swapping out my CCombos for CJFlatCombos, my parent window OnKillFocus handlers would never get called. To solve it, i used ON_CONTROL_REFLECT_EX instead of ON_CONTROL_REFLECT.
     
    In the header file you need to change these:
    afx_msg void OnSetFocus();
    afx_msg void OnKillFocus();
    afx_msg void OnEditUpdate();
     
    To these:
    afx_msg BOOL OnSetFocus();
    afx_msg BOOL OnKillFocus();
    afx_msg BOOL OnEditUpdate();
     
    And in the cpp change:
    ON_CONTROL_REFLECT(CBN_SETFOCUS, OnSetFocus)
    ON_CONTROL_REFLECT(CBN_KILLFOCUS, OnKillFocus)
    ON_CONTROL_REFLECT(CBN_EDITUPDATE, OnEditUpdate)
     
    To these:
    ON_CONTROL_REFLECT_EX(CBN_SETFOCUS, OnSetFocus)
    ON_CONTROL_REFLECT_EX(CBN_KILLFOCUS, OnKillFocus)
    ON_CONTROL_REFLECT_EX(CBN_EDITUPDATE, OnEditUpdate)
     
    Then change the method implementations so that they all return a BOOL value of FALSE, like this:
     
    BOOL CCJFlatComboBox::OnKillFocus()
    {
    m_bHasFocus = FALSE;
    DrawCombo( normal, m_clrBtnFace, m_clrBtnFace );
    return FALSE; //let the parent take a shot at the message
    }
     
    Now command routing can continue as necessary
     

     
    Larry
    Generaluseful but... Pinmembertoxcct1:56 5 Apr '05  
    GeneralCComboBoxEx me too PinmemberBadJerry1:30 5 Apr '05  
    QuestionUpgrade to a CComboBoxEx? PinPopularmemberJeremy Davis5:23 30 Nov '00  

    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
    Web01 | 2.5.120528.1 | Last Updated 16 Dec 1999
    Article Copyright 1999 by Kirk Stowell
    Everything else Copyright © CodeProject, 1999-2012
    Terms of Use
    Layout: fixed | fluid