c++ - 如何绘制禁用图标

标签 c++ winapi mfc

我终于开始为我们的下拉菜单添加图标了:

menu clip
在此图像中,您可以看到除了突出显示的行之外的所有内容都没有问题。突出显示的线条很好,除了图标是用彩色绘制的,而不是灰色的。

我的代码基于极简主义方法:
http://www.codeproject.com/Articles/16529/Simple-Menus-That-Display-Icons-Minimalistic-Appro?msg=4166441#xx4166441xx

基本上,这只需要我绘制图标,而不必使用自定义代码来管理菜单项的所有方面。非常漂亮。

除了选择禁用(灰色)菜单项时,它适用于我们的目的。
但是当菜单项变灰并被选中时,绘制的图标将显示为启用时的样子。错误的。 :(

然而,当背景被突出显示/选择时,完全相同的绘图代码会起作用。

这让我相信 HDC 中完全包含一些声明,它们必须控制图标的显示方式 - 因为以下代码在所有条件下都有效,但被选中:

::DrawIconEx(lpdis->hDC, lpdis->rcItem.left+0, lpdis->rcItem.top, pIcon->GetHandle(), pIcon->GetSize().cx, pIcon->GetSize().cy, 0, NULL, DI_NORMAL);

有谁知道 HDC 中封装了什么状态来控制 DrawIconEx 的功能?如果我可以在未选择绘图时复制选定绘图期间的 HDC 状态,我应该能够生成灰色图标,而无需诉诸 30-50 行手动灰度化内存中图标的实现。

最佳答案

您可以使用:

DrawState(...)

API 函数,带有 DSS_DISABLED 标志,但我不确定输出的质量。

关于c++ - 如何绘制禁用图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436490/

相关文章:

c++ - 我从哪里获得适用于 VS21015 的正确 gdi+ c++ 包装器?

c++ - 在另一台计算机上运行应用程序时缺少 mfc100u.dll

c++ - 拆分器 CreateStatic 问题

android - 错误 : '__NDK_FPABI__' does not name a type. 版本 2

c++ - C++ 中的无限循环

c++ - 通过 COM 在 64 位进程中使用 32 位 DLL

c++ - 将枚举传递给 C++ 中的函数

c++ - 如何使用 CreateFile API 打开分区?

c++ - 访问硬盘的未分配空间

c++ - 您可以在不重新打开重新打开 win32 窗口的情况下执行需要提升的任务吗?