CreateCheckboxImageList - 一个非 MFC 函数,用于创建主题复选框的图像列表






4.90/5 (19投票s)
CreateCheckboxImageList 是一个函数,用于创建主题或非主题复选框的图像列表,适用于树控件、列表控件和列表框。
引言
复选框图像在诸如树控件和列表控件等情况下通常很有用,在这些情况下,使用实际的复选框控件会很困难或导致创建大量子控件。 我在我之前的 XHtmlTree 文章中使用了一个早期版本的 CreateCheckboxImageList。 在此版本中,我删除了 MFC 依赖项,并添加了指定复选框图像大小的选项。 我感谢 David Yuheng Zhao 的优秀 Visual Style 文章,我将其用作 uxtheme.dll 包装器的基础。CreateCheckboxImageList API
这是 CreateCheckboxImageList 函数//============================================================================= // // 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 //CreateCheckboxImageList 函数创建一个由 16 个图像组成的图像列表,由这个
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前 8 个图像是“冷的”,后 8 个是“热的”。 要从冷切换到热,可以将状态与 8 进行 OR 运算。 要从正常切换到禁用,可以将状态与 4 进行 OR 运算。
在 MFC 应用程序中使用 CreateCheckboxImageList
通过简单地将HIMAGELIST
附加到 CImageList
,可以轻松地将 CreateCheckboxImageList 与 MFC 结合使用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 演示
CreateCheckboxImageList 演示应用程序显示了四个不同大小的图像列表
如何使用
步骤 1 - 添加文件
要将 CreateCheckboxImageList 集成到您的应用程序中,您首先需要将以下文件添加到您的项目中
- CreateCheckboxImageList.cpp
- CreateCheckboxImageList.h
- CXDC.h
- XVisualStyles.h
在 Visual Studio 中,.cpp 文件应设置为 不使用预编译头。 否则,您会收到错误
fatal error C1010: unexpected end of file while looking for precompiled header directive
步骤 2 - 将头文件添加到您的源模块
在您要使用 CreateCheckboxImageList 的模块中,包含头文件 CreateCheckboxImageList.h 。步骤 3 - 添加代码
在OnInitDialog
或其他初始化例程中,添加代码以创建图像列表,然后在 DrawItem()
或 OnPaint()
函数中绘制适当的图像。文件 XVisualStyles.h 包含头文件 uxtheme.h 和 tmschema.h。 这些文件位于 Windows Platform SDK 中。 通常,此时我会插入 Platform SDK 的下载 URL,但其位置经常更改,因此最好让 Google 为您找到它: http://www.google.com/search?q=%22platform+sdk%22。
修订历史
版本 1.1 - 2008 年 4 月 15 日
- 首次公开发布
版本 1.0 - 2007 年 7 月 15 日
- 嵌入在 XHtmlTree 中
用法
此软件已发布到公共领域。您可以随意使用它,但您不得出售此源代码。如果您修改或扩展它,请考虑在此处发布新代码供大家分享。此软件按“原样”提供,不提供任何明示或暗示的保证。对于本软件可能造成的任何损害或业务损失,我概不负责。