Click here to Skip to main content
Click here to Skip to main content
Go to top

CreateCheckboxImageList - a non-MFC function to create an imagelist of themed checkboxes

, 15 Apr 2008
Rate this:
Please Sign up or sign in to vote.
CreateCheckboxImageList is a function that creates an imagelist of themed or non-themed checkboxes, suitable for use in tree controls, list controls, and list boxes.


Checkbox images are often useful in situations such as tree controls and list controls, where using an actual checkbox control would be difficult or would result in creation of large number of child controls. I have used an earlier version of CreateCheckboxImageList in my XHtmlTree article. In this version I have removed MFC dependencies and added option to specify size of checkbox images. I am indebted to David Yuheng Zhao for his excellent Visual Style article, which I used as basis for uxtheme.dll wrapper.

CreateCheckboxImageList API

Here is the CreateCheckboxImageList function:
// CreateCheckboxImageList()
// Purpose:     Create themed checkbox image list
// Parameters:  hDC              - device context for drawing
//              nSize            - height and width of images
//              crBackground     - fill color
//              bUseVisualThemes - TRUE = use themes if enabled
// Returns:     HIMAGELIST       - imagelist handle; NULL if create fails
The CreateCheckboxImageList function creates an imagelist of 16 images, as defined by this enum:
    enum { COLD_UNUSED_1 = 0,        // 0000
           COLD_UNCHECKED_NORMAL,    // 0001
           COLD_CHECKED_NORMAL,      // 0010
           COLD_TRISTATE_NORMAL,     // 0011

           COLD_UNUSED_2,            // 0100
           COLD_UNCHECKED_DISABLED,  // 0101
           COLD_CHECKED_DISABLED,    // 0110
           COLD_TRISTATE_DISABLED,   // 0111

           HOT_UNUSED_1,             // 1000
           HOT_UNCHECKED_NORMAL,     // 1001
           HOT_CHECKED_NORMAL,       // 1010
           HOT_TRISTATE_NORMAL,      // 1011

           HOT_UNUSED_2,             // 1100
           HOT_UNCHECKED_DISABLED,   // 1101
           HOT_CHECKED_DISABLED,     // 1110
           HOT_TRISTATE_DISABLED };  // 1111
The first 8 images are "cold", the next 8 "hot". To switch from cold to hot, you can OR the state with 8. To switch from normal to disabled, you can OR the state with 4.

Using CreateCheckboxImageList in an MFC App

It is easy to use CreateCheckboxImageList with MFC by simply attaching the HIMAGELIST to a CImageList:
    HIMAGELIST hil = 0;
    hil = HDCheckboxImageList::CreateCheckboxImageList(pDC->m_hDC, 16, 
            GetSysColor(COLOR_WINDOW), TRUE);
    CImageList imagelist;    // usually this will be class variable

CreateCheckboxImageList Demo

The CreateCheckboxImageList demo app displays four imagelists of different sizes:


When Enable Visual Themes checkbox is unchecked, checkboxes are created without visual themes:


How to use

Step 1 - Add Files

To integrate CreateCheckboxImageList into your app, you first need to add following files to your project:

  • CreateCheckboxImageList.cpp
  • CreateCheckboxImageList.h
  • CXDC.h
  • XVisualStyles.h

The .cpp file should be set to Not using precompiled header in Visual Studio. Otherwise, you will get error

    fatal error C1010: unexpected end of file while looking for precompiled header directive

Step 2 - Add Header File to Your Source Module

In the module where you want to use CreateCheckboxImageList, include header file CreateCheckboxImageList.h .

Step 3 - Add Code

In OnInitDialog or other initialization routine, add code to create imagelist, and then draw appropriate image in DrawItem() or OnPaint() function.
The file XVisualStyles.h includes header files uxtheme.h and tmschema.h. These files are found in Windows Platform SDK. Normally, at this point I would insert the download url for Platform SDK, but its location changes often, so it's best to let google find it for you:

Revision History

Version 1.1 - 2008 April 15

  • Initial public release

Version 1.0 - 2007 July 15

  • Embedded in XHtmlTree


This software is released into the public domain. You are free to use it in any way you like, except that you may not sell this source code. If you modify it or extend it, please to consider posting new code here for everyone to share. This software is provided "as is" with no expressed or implied warranty. I accept no liability for any damage or loss of business that this software may cause.


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


About the Author

Hans Dietrich
Software Developer (Senior) Hans Dietrich Software
United States United States
I attended St. Michael's College of the University of Toronto, with the intention of becoming a priest. A friend in the University's Computer Science Department got me interested in programming, and I have been hooked ever since.
Recently, I have moved to Los Angeles where I am doing consulting and development work.
For consulting and custom software development, please see

Comments and Discussions

QuestionNo CheckBoxes drawn with VS2010 RC1 Pinmemberpscholl17-Feb-10 3:33 
AnswerRe: No CheckBoxes drawn with VS2010 RC1 PinmentorHans Dietrich17-Feb-10 3:59 
AnswerRe: No CheckBoxes drawn with VS2010 RC1 Pinmemberpscholl18-Feb-10 0:48 
GeneralRe: No CheckBoxes drawn with VS2010 RC1 PinmentorHans Dietrich18-Feb-10 4:46 
GeneralRe: No CheckBoxes drawn with VS2010 RC1 Pinmemberpscholl18-Feb-10 6:34 
QuestionHave you ever tried to use the CXVisualStyles on Windows 2000? Pinmemberpoxui30-Sep-08 12:49 
QuestionOut of sincere interest... PinmemberJohann Gerell16-Apr-08 20:37 
GeneralRe: Out of sincere interest... PinmvpHans Dietrich16-Apr-08 23:37 

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
Web01 | 2.8.140916.1 | Last Updated 15 Apr 2008
Article Copyright 2008 by Hans Dietrich
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid