Click here to Skip to main content
Click here to Skip to main content

Adding Checkboxes to a list control

By , 9 Jan 2000
Rate this:
Please Sign up or sign in to vote.

A list view gives the GUI designer many options. One of the best is the ability to display tabular data in columns, sort columns, add images and more. This is well implemented by CListView in MFC.

A checked list box enables the GUI designer to get the users picked options via a checkbox on every list item. This is well implemented by CCheckListBox in MFC.

How to combine them both into one control?

Basically, there are two options: either you use owner drawn list view controls and draw your own check boxes as small images OR you can use the new control introduced in Microsoft's IE 3.0. To use the new features of a list view control you must install IE 3.0 (or above) to get the newest version of COMCTL32.DLL (the common controls library).

This control introduces some new flags in the ListView style and adds accepts some macros defined in the windows header files.

Bear in mind, the new flags and macros DO NOT APPEAR in VC++ 4.2 help files and started to exists in help files only from MSDN Jan 97 version and V++ 5.0

Well, here goes:

First, you have to set the new style in the list view control. This can be done by:

ListView_SetExtendedListViewStyle 
   (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);

This sets the list view to support check boxes and also a full row select (not only the 1st column).

LVS_EX_CHECKBOXES The control supplies check boxes for each item. You can retrieve the state of the check box by using the ListView_GetCheckState macro.
LVS_EX_FULLROWSELECT When an item is selected, all of its subitems are also displayed as elected. Clicking on any subitem will select the entire row. This extended style is only effective in conjunction with the LVS_REPORT style.
LVS_EX_GRIDLINES Dashed gridlines are displayed around all items and subitems. This extended style is only effective in conjunction with the LVS_REPORT style.
LVS_EX_HEADERDRAGDROP Enables drag-and-drop re-ordering of the columns in the ListView. This extended style is only effective in conjunction with the LVS_REPORT style.
LVS_EX_SUBITEMIMAGES Allows images to be displayed for subitems. This extended style is only effective in conjunction with the LVS_REPORT style.
LVS_EX_TRACKSELECT Enables hot tracking of items in a ListView control. Hot Tracking, also known as Hover Selection, means that an item is automatically selected when the mouse pointer is over it for more than 1 second. This style applies to all styles of the ListView control.

How to get notification when an item is checked / unchecked:

void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    *pResult = 0;

    if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
        return;    // No change


    // Old check box state
    BOOL bPrevState = (BOOL)(((pNMListView->uOldState & 
                LVIS_STATEIMAGEMASK)>>12)-1);  
    if (bPrevState < 0)    // On startup there's no previous state 
        bPrevState = 0; // so assign as false (unchecked)

    // New check box state
    BOOL bChecked = <BR>            (BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);   
    if (bChecked < 0) // On non-checkbox notifications assume false
        bChecked = 0; 

    if (bPrevState == bChecked) // No change in check box
        return;
    
    // Now bChecked holds the new check box state

    // ....
}

for this to work, you must map the following message:

ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)

Setting the check box state of an item:

Try the following piece of code

void SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
{
    ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, 
        UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
}

Getting the check box state of an item:

Use the macro ListView_GetCheckState(hwndLV, i) defined in commctl.h (hwndLV is the window handle of the list view member - i.e, m_lvTestList.m_hWnd and i is the list view index)

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

Eran Yariv

United States United States
No Biography provided

Comments and Discussions

 
QuestionHi PinmemberBinni shah9-Mar-12 18:15 
Question&gt;&gt;12)-1 ? Pinmember_pw27-Nov-05 23:03 
AnswerRe: &gt;&gt;12)-1 ? Pinmemberdontknowitall6-May-07 14:31 
QuestionHow to select only one check box ? Pinmemberdhawan_boss@yahoo.com12-Sep-05 22:59 
QuestionHow to select only one check box ? PinsussAnonymous12-Sep-05 22:55 
GeneralThanks Pinmembertsurutsuru17-Mar-05 9:57 
GeneralGreat article PinmemberTrapper300115-Dec-03 15:24 
QuestionHow to use OnItemchangedLinksList PinmemberMichael Klim19-Oct-03 7:07 
Questionhow to add a check box and item without a check box in a single column Pinmemberabhijeet4all25-Sep-03 2:52 
QuestionHow to disable check box within ctrlList,thanks Pinmembernodream16-Jun-03 0:02 
GeneralI want partly checkbox in one column Pinsusssandmanq29-Mar-03 1:43 
GeneralRe: I want partly checkbox in one column Pinmemberlvidaguren18-Feb-04 18:58 
QuestionHow can set all column with checkbox? Pinsusssages10-Mar-03 22:23 
AnswerRe: How can set all column with checkbox? PinmemberSaravanan_article23-Dec-05 21:13 
GeneralSetLVCheck doesn't seem to work Pinmemberprospector89-Mar-03 15:22 
GeneralRe: SetLVCheck doesn't seem to work Pinmemberj2xuk28-Mar-04 20:33 
GeneralRe: SetLVCheck doesn't seem to work Pinmembertidi28-Jul-04 21:58 
Questionhow to get the the header 's text of every column Pinmemberdvid6-Mar-03 16:10 
GeneralAdding Check Box to List COntrol PinmemberAnonymous4-May-02 14:07 
Generalproblem with common controls 6.0 PinmemberDaveBevan3-Apr-02 14:22 
QuestionCan u please tell me how to include Comctl32.dll to existing project environment PinmemberRavi ;-)3-Dec-01 20:28 
Questioncan someone explain ListView_SetItemState(...) PinmemberAnonymous18-Jul-01 14:33 
Generalsimple sample Pinmembererez17-May-01 2:00 
GeneralThis is great PinmemberSP3-Apr-01 13:41 
How do I get the checkboxes to show up if there are images in the list. It works great with text items in the list box.
 
Smile | :) Thanks
SP
QuestionHow to disable check box within ctrlList PinmemberAnonymous25-Mar-01 22:53 
AnswerRe: How to disable check box within ctrlList Pinmemberlauren26-Mar-01 0:09 
GeneralI see, you are the smart one... PinmemberPav2-May-01 7:01 
GeneralRe: I see, you are the smart one... Pinmemberlauren2-May-01 11:23 
GeneralRe: I see, you are the smart one... PinmemberPav3-May-01 4:54 
GeneralRe: How to disable check box within ctrlList PinmemberAnna-Jayne Metcalfe10-Jun-04 3:29 
GeneralRe: How to disable check box within ctrlList Pinmembermagenof25-Jan-07 9:12 
GeneralRe: How to disable check box within ctrlList PinmemberBzepp19-Jun-07 12:11 
AnswerRe: How to disable check box within ctrlList PinmemberDave Loeser5-Jun-03 8:48 
AnswerRe: How to disable check box within ctrlList Pinmembermace28-Apr-05 3:48 
GeneralCheck boxes and Images in subItems PinmemberAnonymous18-Nov-00 23:08 
QuestionHow to put check box in 2nd column PinsussJean Laborde27-Jun-00 3:49 
AnswerRe: How to put check box in 2nd column PinsussKarl-Heinz Pfueller13-Jul-00 2:23 
GeneralRe: How to put check box in 2nd column Pinsussyaoyj3-Nov-02 20:15 
GeneralRe: How to put check box in 2nd column Pinmemberdvid6-Mar-03 16:05 
GeneralFining out which items are "checked". PinsussQuoc18-Jun-00 16:43 
GeneralRe: Fining out which items are checked PinsussRobin Dunlop4-Jul-00 22:39 
GeneralRe: Fining out which items are checked Pinmemberkiranin19-May-06 0:06 
QuestionDoes it work with virtual listctrl (LVS_OWNERDATA) ? PinsussEmmanuel Derriey2-Apr-00 21:11 
AnswerRe: Does it work with virtual listctrl (LVS_OWNERDATA) ? PinsussAnonymous22-Apr-04 10:56 
QuestionSample for Owner-Drawn Checkboxes ? PinsussMichael Krebs12-Jan-00 4:27 
AnswerRe: Sample for Owner-Drawn Checkboxes ? PinsussMike Dunn12-Jan-00 19:50 

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.

| Advertise | Privacy | Mobile
Web04 | 2.8.140415.2 | Last Updated 10 Jan 2000
Article Copyright 2000 by Eran Yariv
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid