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






4.90/5 (19 votes)
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.
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 }; // 1111The 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 theHIMAGELIST
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:
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
InOnInitDialog
or other initialization routine,
add code to create imagelist, and then draw appropriate image in
DrawItem()
or OnPaint()
function.
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.