MFC用于计算控件的高光,阴影等的算法或函数是什么?

时间:2019-05-18 22:31:20

标签: c++ colors mfc cbutton

我制作了ColorButton的{​​{1}}子类,并在样式中设置了CButton标志。

工作正常:我可以设置其文本,背景等。

但是,我不想手动设置次要颜色(突出显示,阴影, 等等。)我可以根据背景选择白色或黑色作为文本的一种启发。我可以对其他次要颜色执行相同的操作,但是我的公式与Windows在背景相同的颜色下会有所不同,因此看起来很奇怪。所以:

问题:有没有办法找出Windows为给定背景色的BS_OWNERDRAW返回什么?

为了获得答案,我看到GetSysColor(COLOR_BTNSHADOW)允许自定义颜色,而无需创建整个子类。我再次看到的内容允许对每种颜色进行微管理,但是不允许我寻找高级功能。我宁愿坚持使用我的解决方案,因为它已经在运行,并且可以在XP和更高版本上使用。 (这是一个免费软件实用程序,因此谁知道旧的OS用户可能会有什么。)也就是说,如果有一个CMFCButton解决方案也会引起人们的兴趣。

2 个答案:

答案 0 :(得分:0)

GetSysColor对背景颜色不敏感。它仅具有一组颜色条目(基于视觉样式),并将返回这些值。如果您想要在其他背景下有意义的值,则需要自己提出合理的值。

答案 1 :(得分:0)

根本不是一个完整的答案,但是只要颜色是单色的(R G和B分量相等):

  • 突出显示颜色为127 +通道值/ 2(整数数学)

  • 阴影颜色为channelvalue / 3 * 2(再次为整数数学)

例如:R,G和B值为200的背景的高光部分为227,阴影部分为132。

对于非灰色背景,似乎进行了完全不同的计算。仅使用上述公式逐个通道即可获得非常有用的结果,但是最初的问题不是“什么将提供有用的结果”,而是特别是“ Windows的计算是什么?”

Windows也有深色阴影,在我尝试过的每种颜色中,阴影颜色始终为0x404040。