65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (19投票s)

2008年4月15日

CPOL

2分钟阅读

viewsIcon

171958

downloadIcon

2325

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 演示应用程序显示了四个不同大小的图像列表

screenshot

当取消选中 启用视觉主题 复选框时,将创建没有视觉主题的复选框

screenshot

如何使用

步骤 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.htmschema.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 中

用法

此软件已发布到公共领域。您可以随意使用它,但您不得出售此源代码。如果您修改或扩展它,请考虑在此处发布新代码供大家分享。此软件按“原样”提供,不提供任何明示或暗示的保证。对于本软件可能造成的任何损害或业务损失,我概不负责。

© . All rights reserved.