Visual C++ 7.1Visual Studio 6Visual C++ 7.0Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
CPropertySheet 的高彩色图标






4.81/5 (19投票s)
升级 CPropertySheet 选项卡控件以显示高彩色图标。
引言
我想为我当前的项目在属性页上添加图标。在选择了几个图标(恰好是 24 位)并升级了我的应用程序后,我惊讶地发现这些图标只显示了 16 种颜色。
我查阅了 Microsoft 知识库,并在网上搜索了讨论此问题的文章,但一无所获。在使用 CPropertySheet
及其依赖项 CTabCtrl
和 CImageList
进行了一些调查后,我提出了本文中介绍的解决方案。
另请注意,所提供的解决方案也适用于优秀的 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日,初始发布。