Click here to Skip to main content
15,867,985 members
Articles / Desktop Programming / MFC
Article

CCheckComboBox II

Rate me:
Please Sign up or sign in to vote.
4.75/5 (11 votes)
4 Jul 2004CPOL3 min read 124.3K   5.8K   45   21
A ComboBox that has a checkbox by each of its items.

Sample Image - CheckComboBox.png

Introduction

This control is actually a modification of the CCheckComboBox class that was written by Magnus Egelberg, Lunalogik. Magnus' control had just about everything I was looking for in a CheckComboBox except one small feature. It did not allow you to check an item in the static text portion of the combo box, you had to drop down the list box in order to make the selections. All the drawing code in this class was written by Magnus. The only additions I made was the code to handle the check box in the static text area, and I removed the dependency on the item data for storing the check state of the items. It is now stored in a CByteArray member variable.

Usage

To use the control, you have to include the CheckComboBox.h header file and add the CheckComboBox.cpp file to your project.

If the control is used on a dialog, it has to have the CBS_DROPDOWNLIST and CBS_OWNERDRAWVARIABLE combo box styles.

Command Notifications

In addition to the regular CBN_* notifications that are generated by the combobox, the CCheckComboBox will also generate a BN_CLICKED notification whenever a user changes the check state of a check box. You can handle the BN_CLICKED notification exactly the same way you would handle it if it was generated by a button control. Use the GetCurSel() member function to get the index of the checkbox that generated the BN_CLICKED notification.

BEGIN_MESSAGE_MAP(CCCheckCombo_demoDlg, CDialog)
    // use the ON_BN_CLICKED macro to catch the BN_CLICKED
    // command that is generated by the CCheckComboBox
    ON_BN_CLICKED(IDC_COMBO1, OnCheckBox)
END_MESSAGE_MAP()
 
...
 
void CCCheckCombo_demoDlg::OnCheckBox()
{
    int sel = m_CheckCombo.GetCurSel();
    CString text;
    m_CheckCombo.GetLBText(sel, text);
    BOOL checked = m_CheckCombo.GetCheck(sel);
    TRACE(_T("Item %d (\"%s\") was %s \n"), sel, 
       text, checked ? _T("checked") : _T("unchecked"));
}

Member Functions

These are the public member functions added to the CCheckComboBox. All CComboBox member functions can also be used.

  • BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)

    Use this function to dynamically create a CCheckComboBox control. The required combo box styles are set automatically.

    Return value

    Nonzero if successful, otherwise 0.

    Parameters

    dwStyleThe WS_* and CBS_* styles for the control. The CBS_DROPDOWNLIST and CBS_OWNERDRAWVARIABLE styles are set automatically if they are not specified.
    rectThe position and size of the CCheckComboBox.
    pParentWndSpecifies the CCheckComboBox’s parent window (usually a CDialog). It must not be NULL.
    nIDSpecifies the CCheckComboBox’s control ID.
  • BOOL GetCheck(int nIndex)

    Use this function to get the checked state of the check box at the specified zero based index.

    Return value

    TRUE if the check box is checked, otherwise FALSE.

    Parameters

    nIndexThe zero based index of the check box
  • BOOL SetCheck(int nIndex, BOOL bCheck = TRUE)

    Sets the check state for the check box at the specified zero based index.

    Return value

    The previous check state. TRUE if the check box was checked, FALSE if not.

    Parameters

    nIndexThe zero based index of the check box
    bCheckThe new check state. TRUE to check the check box, FALSE to uncheck it.
  • void CheckAll(BOOL bCheck = TRUE)

    Sets the checked state of all the check boxes in the CCheckComboBox control.

    Return value

    There is no return value.

    Parameters

    bCheckThe new check state. TRUE to check the check boxes, FALSE to uncheck them.

License

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


Written By
President
Canada Canada
Father of two, brother of two, child of two.
Spouse to one, uncle to many, friend to lots.
Farmer, carpenter, mechanic, electrician, but definitely not a plumber.
Likes walks with the wife, board games, card games, travel, and camping in the summer.
High school graduate, college drop-out.
Hobby programmer who knows C++ with MFC and the STL.
Has dabbled with BASIC, Pascal, Fortran, COBOL, C#, SQL, ASM, and HTML.
Realized long ago that programming is fun when there is nobody pressuring you with schedules and timelines.

Comments and Discussions

 
QuestionHow to increase size of dropdown list to show more number of element? Pin
Anurag Daware2-Jun-15 22:33
Anurag Daware2-Jun-15 22:33 
AnswerRe: How to increase size of dropdown list to show more number of element? Pin
PJ Arends4-Jun-15 12:09
professionalPJ Arends4-Jun-15 12:09 
GeneralRe: How to increase size of dropdown list to show more number of element? Pin
Anurag Daware7-Jun-15 22:40
Anurag Daware7-Jun-15 22:40 
QuestionCCheckComboBox II & VB.net Pin
Eran SMS10-Jul-13 21:59
Eran SMS10-Jul-13 21:59 
GeneralSome features ! Pin
Bui Tan Duoc21-Mar-11 16:02
professionalBui Tan Duoc21-Mar-11 16:02 
QuestionHow can I use this control on a dialog bar ? Pin
mesajflaviu11-Jan-11 8:01
mesajflaviu11-Jan-11 8:01 
GeneralI create a VC2008 project, failed to used your code, when addstring function is invoked, software crashed Pin
skysailor_x19-Apr-10 3:02
skysailor_x19-Apr-10 3:02 
GeneralRe: I create a VC2008 project, failed to used your code, when addstring function is invoked, software crashed Pin
Member 1317810215-May-17 23:26
Member 1317810215-May-17 23:26 
QuestionWhy SELCHANGE was called twice? Pin
quyun14-Feb-10 2:08
quyun14-Feb-10 2:08 
QuestionDoesn't work on 64-bit Vista Pin
mpietarin14-Aug-08 0:33
mpietarin14-Aug-08 0:33 
AnswerRe: Doesn't work on 64-bit Vista Pin
mpietarin18-Aug-08 5:30
mpietarin18-Aug-08 5:30 
QuestionUsing this control in ATL Pin
Rajkumar Rachoti9-Nov-06 2:10
Rajkumar Rachoti9-Nov-06 2:10 
Questionc# code Pin
mrinal1227-Oct-06 13:06
mrinal1227-Oct-06 13:06 
AnswerRe: c# code Pin
PJ Arends27-Oct-06 17:27
professionalPJ Arends27-Oct-06 17:27 
GeneralDisabling item selection from dropdown list box Pin
Daalu20-Sep-06 22:38
Daalu20-Sep-06 22:38 
GeneralRe: Disabling item selection from dropdown list box Pin
PJ Arends21-Sep-06 8:19
professionalPJ Arends21-Sep-06 8:19 
GeneralUsage question... Pin
soonaz30-Aug-06 5:26
soonaz30-Aug-06 5:26 
GeneralRe: Usage question... Pin
PJ Arends30-Aug-06 6:07
professionalPJ Arends30-Aug-06 6:07 
Generalgood... but... Pin
Min-Seok Kim26-Jul-05 1:53
Min-Seok Kim26-Jul-05 1:53 
GeneralComment Pin
mcbain30-Dec-03 1:00
mcbain30-Dec-03 1:00 
GeneralRe: Comment Pin
PJ Arends30-Dec-03 7:04
professionalPJ Arends30-Dec-03 7:04 

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

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