为啥在 CToolBar 中使用高深度颜色的禁用按钮只是灰色框?
Posted
技术标签:
【中文标题】为啥在 CToolBar 中使用高深度颜色的禁用按钮只是灰色框?【英文标题】:Why are disabled buttons using high depth colour in CToolBar are just grey boxes?为什么在 CToolBar 中使用高深度颜色的禁用按钮只是灰色框? 【发布时间】:2011-08-01 12:54:52 【问题描述】:我已按照此问题的步骤进行操作: Higher color depth for MFC toolbar icons?
代码有效。但我还有另一个问题 - 任何禁用的按钮都只是灰色框。 一旦它们被启用 - 它们就是它们应该的样子。
我怀疑 CToolBar 不知道如何将提供的图像变灰 - 谁能帮忙?
提前致谢。
【问题讨论】:
【参考方案1】:CToolBar 实际上最多接受三个图像列表,每个图像列表来处理按钮的正常、禁用和突出显示状态。
完成我需要的 - 只是正常和禁用的按钮状态。我需要两张图片。一个带有普通彩色图标,另一个带有灰色图标。
将图像作为位图资源添加到您的项目中 - 修改并记下 ID
创建两个图像列表并进行相应设置:(m_wndToolBar 是我项目中的工具栏)
CImageList imgListActive;
CImageList imgListDisabled;
/* Load your CImageLists */
m_wndToolBar.GetToolBarCtrl().SetImageList(&imgListActive);
m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&imgListDisabled);
设置工具栏的高亮版本:
CImageList imgListHighlighted;
/* Load your CImageList */
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&imgListHighlighted);
瞧!
【讨论】:
【参考方案2】:通常需要两件事来获得高颜色按钮和正确变灰的图像:
-
始终在 VisualStudio 之外编辑工具栏的 .bmp 文件。
使用对 CMFCToolBar::AddToolBarForImageCollection(IDR_MAINFRAME) 的调用将图像添加到 MFC;在您的 InitInstance() 实现中。
不幸的是,这也意味着您必须直接在应用程序的 .rc 资源文件中编辑工具栏定义。
【讨论】:
以上是关于为啥在 CToolBar 中使用高深度颜色的禁用按钮只是灰色框?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 plotly 条形图在 R 中不按顺序使用我指定的颜色,我如何强制它按顺序使用我的颜色?