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

CPropertySheet 的高彩色图标

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (19投票s)

2004 年 2 月 27 日

CPOL

2分钟阅读

viewsIcon

132891

downloadIcon

6050

升级 CPropertySheet 选项卡控件以显示高彩色图标。

Sample Image - HighColorTab.png

引言

我想为我当前的项目在属性页上添加图标。在选择了几个图标(恰好是 24 位)并升级了我的应用程序后,我惊讶地发现这些图标只显示了 16 种颜色。

我查阅了 Microsoft 知识库,并在网上搜索了讨论此问题的文章,但一无所获。在使用 CPropertySheet 及其依赖项 CTabCtrlCImageList 进行了一些调查后,我提出了本文中介绍的解决方案。

另请注意,所提供的解决方案也适用于优秀的 CTreePropSheet[^] 控件,而我实际上正在使用这个控件。

使用代码

使用代码非常简单。您需要创建一个派生自 CPropertySheet 的新类,以便重写 OnInitDialog。将 "HighColorTab.hpp" 包含到新属性表的 .cpp 文件中。在 OnInitDialog 的主体中,添加以下行

HighColorTab::UpdateImageList( *this );

就是这样:您完成了! 演示项目提供了一个示例。

它是如何工作的?

代码非常简单,位于 HighColorTab.hpp 中的单个函数中。 该函数执行以下操作

  • 从提供的属性表(或具有类似接口的对象)获取选项卡控件 (CTabCtrl),
  • 使用提供的特性创建替换图像列表 (CImageList),
  • 使用存储在每个属性页中的图标信息填充图像列表,
  • 替换图像列表,
  • 销毁旧的图像列表。

工作流程是这样的,如果在图像列表创建过程中出现任何问题,属性表将保持不变。

要使用的图像列表可以通过提供给 UpdateImageListFull 的特性进行自定义。 该特性必须实现一个具有以下签名的函数

static std::auto_ptr<CImageList> CreateImageList();

UpdateImageList 使用默认特性,该特性使用 ILC_COLOR32 创建图像列表。 不要忘记同时设置 ILC_MASK,否则图标的背景将变成黑色。

历史

  • 2004年2月27日,初始发布。
© . All rights reserved.