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 位图标的按钮?的主要内容,如果未能解决你的问题,请参考以下文章