如何绘制禁用的图标

时间:2012-02-24 19:03:14

标签: 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行实现手动灰度缩放内存中的图标。

1 个答案:

答案 0 :(得分:1)

您可以使用:

DrawState(...)

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