我制作了ColorButton
的{{1}}子类,并在样式中设置了CButton
标志。
工作正常:我可以设置其文本,背景等。
但是,我不想手动设置次要颜色(突出显示,阴影, 等等。)我可以根据背景选择白色或黑色作为文本的一种启发。我可以对其他次要颜色执行相同的操作,但是我的公式与Windows在背景相同的颜色下会有所不同,因此看起来很奇怪。所以:
问题:有没有办法找出Windows为给定背景色的BS_OWNERDRAW
返回什么?
为了获得答案,我看到GetSysColor(COLOR_BTNSHADOW)
允许自定义颜色,而无需创建整个子类。我再次看到的内容允许对每种颜色进行微管理,但是不允许我寻找高级功能。我宁愿坚持使用我的解决方案,因为它已经在运行,并且可以在XP和更高版本上使用。 (这是一个免费软件实用程序,因此谁知道旧的OS用户可能会有什么。)也就是说,如果有一个CMFCButton
解决方案也会引起人们的兴趣。
答案 0 :(得分:0)
GetSysColor对背景颜色不敏感。它仅具有一组颜色条目(基于视觉样式),并将返回这些值。如果您想要在其他背景下有意义的值,则需要自己提出合理的值。
答案 1 :(得分:0)
根本不是一个完整的答案,但是只要颜色是单色的(R G和B分量相等):
突出显示颜色为127 +通道值/ 2(整数数学)
阴影颜色为channelvalue / 3 * 2(再次为整数数学)
例如:R,G和B值为200的背景的高光部分为227,阴影部分为132。
对于非灰色背景,似乎进行了完全不同的计算。仅使用上述公式逐个通道即可获得非常有用的结果,但是最初的问题不是“什么将提供有用的结果”,而是特别是“ Windows的计算是什么?”
Windows也有深色阴影,在我尝试过的每种颜色中,阴影颜色始终为0x404040。