我终于开始为我们的下拉菜单添加图标了:
在此图像中,您可以看到除了突出显示的行之外的所有内容都没有问题。突出显示的线条很好,除了图标是用彩色绘制的,而不是灰色的。
我的代码基于极简主义方法:
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/