为啥在 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 中不按顺序使用我指定的颜色,我如何强制它按顺序使用我的颜色?

一种颜色的图片我保存为gif和png格式的图片,为啥颜色会有偏差呢

为啥这个 CSS 过渡没有按预期工作? [复制]

CToolBar 是停靠还是浮动?

为啥按分号后程序又回到深度递归?

为啥生成的二维码识别不了?