CToolbar 是不是支持带有 32 位图标的按钮?

Posted

技术标签:

【中文标题】CToolbar 是不是支持带有 32 位图标的按钮?【英文标题】:Does CToolbar support buttons with 32 bit icons?CToolbar 是否支持带有 32 位图标的按钮? 【发布时间】:2014-01-29 09:40:20 【问题描述】:

问题: 向 CToolbar 实例添加 32 位图标似乎无法正常工作 (图像质量变化)。

我在WEB遇到的2类话题,和我的问题有关:

1-st 告诉如何将 32 位图像添加到 CToolBar 第二个(实际上是 MSDN 文档中的一页)“CToolBar 支持最多 16 种颜色的位图" (http://msdn.microsoft.com/en-us/library/69wz6ea1.aspx)

奇怪的是文档中提到了“16色”,而不是2^16色, 所以我可能会错误地解释该信息。

【问题讨论】:

【参考方案1】:

如果您查看CToolBar::LoadBitmap,您会发现位图是使用AfxLoadSysColorBitmap 加载的。快速查看该函数会发现颜色表固定为 16 种颜色。

// make copy of BITMAPINFOHEADER so we can modify the color table
const int nColorTableSize = 16;

与 MFC 中的大多数东西一样,如果您覆盖了足够多的方法,您可能可以使其加载 32 位位图,但正如您可能已经在其他地方看到的那样,您真的想使用 CMFCToolBar不仅支持更高的颜色深度,还支持许多其他改进的功能。

【讨论】:

这个数字“16”代表颜色数还是位数?我知道一个 CMFCToolbar,但由于我正在处理一个遗留项目,用改进的版本替换所有出现的 CToolbar 将是非常痛苦的。顺便说一句,谢谢你的回答,你给了我有用的信息并证明了我的担忧!附言我讨厌 MFC 功能,尤其是文档,如果我被允许使用 Qt - 我应该立即使用 ))【参考方案2】:

很长一段时间以来,CToolBar 通过图像列表支持图像。

因此,技巧是加载作为工具栏资源一部分的默认 16 色图像,然后在通过包含的 CToolBarCtrl 将它们分配给工具栏之前以任何颜色深度创建图像列表。

即。

if (m_toolbar.LoadToolBar(IDR_MAINFRAME))

   // create imagelist
   if (m_imageList.Create(....))
   
      m_toolbar.GetToolBarCtrl().SetImageList(&m_ilNormal);
   

【讨论】:

【参考方案3】:

或许你应该使用CMFCToolBar:http://msdn.microsoft.com/ru-ru/library/bb984480.aspx

【讨论】:

感谢您的提议,但我不知道您的回答如何解决我的问题。

以上是关于CToolbar 是不是支持带有 32 位图标的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

在 std::bitset 中作为运算符重载提供的按位运算(&、^.| 等)是不是使用 AVX 或 SSE4 指令?

Masm 常量的按位运算

Apache Pig 中的按位运算?

将 CDialogBar 与 CToolbar 水平对接

并行/组合多个 64 位值的按位排列

比较顺序不同的按位运算 - (0 到 1) 与 (1 到 0)