Click here to Skip to main content
5,785,816 members and growing! (17,590 online)
Email Password   helpLost your password?
Desktop Development » Button Controls » General     Intermediate License: The Code Project Open License (CPOL)

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

By Hans Dietrich

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.
C++ (VC6, VC8.0, C++), Windows, Visual Studio (VS2005, VS6, Visual Studio), Dev

Posted: 15 Apr 2008
Updated: 15 Apr 2008
Views: 17,379
Bookmarked: 45 times
Note: This is an unedited reader contribution
Announcements
Loading...



Search    
Advanced Search
Sitemap
15 votes for this Article.
Popularity: 5.59 Rating: 4.75 out of 5
0 votes, 0.0%
1
1 vote, 6.7%
2
1 vote, 6.7%
3
1 vote, 6.7%
4
12 votes, 80.0%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

Introduction

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
    imagelist.Attach(hil);

CreateCheckboxImageList Demo

The CreateCheckboxImageList demo app displays four imagelists of different sizes:

screenshot

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

screenshot

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: http://www.google.com/search?q=%22platform+sdk%22.

Revision History

Version 1.1 - 2008 April 15

  • Initial public release

Version 1.0 - 2007 July 15

  • Embedded in XHtmlTree

Usage

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.

License

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

About the Author

Hans Dietrich


Mvp
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.
Occupation: Software Developer (Senior)
Location: United States United States

Other popular Button Controls articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 4 of 4 (Total in Forum: 4) (Refresh)FirstPrevNext
GeneralHave you ever tried to use the CXVisualStyles on Windows 2000?memberpoxui13:49 30 Sep '08  
GeneralAny possibility to do the same for radio buttons?memberpscholl6:50 15 Aug '08  
QuestionOut of sincere interest...memberJohann Gerell21:37 16 Apr '08  
GeneralRe: Out of sincere interest...mvpHans Dietrich0:37 17 Apr '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 15 Apr 2008
Editor:
Copyright 2008 by Hans Dietrich
Everything else Copyright © CodeProject, 1999-2009
Web16 | Advertise on the Code Project