|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
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
IntroductionCheckbox 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 APIHere 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 AppIt 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 DemoThe CreateCheckboxImageList demo app displays four imagelists of different sizes:
How to useStep 1 - Add FilesTo integrate CreateCheckboxImageList into your app, you first need to add following files to your project:
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 ModuleIn the module where you want to use CreateCheckboxImageList, include header file CreateCheckboxImageList.h .Step 3 - Add CodeInOnInitDialog 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 HistoryVersion 1.1 - 2008 April 15
Version 1.0 - 2007 July 15
UsageThis 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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||