0

我已经创建了一个ColorButton子类CButton,在样式中设置BS_OWNERDRAW标志。

它工作正常:我可以设置它的文本、背景等。

但是我不想手动设置次要颜色(高光、阴影等)。我有一个启发式方法,可以根据背景为文本选择白色或黑色。我可以对其他次要颜色做同样的事情,但我的公式会与 Windows 所做的不同,因为背景颜色相同,因此看起来很奇怪。所以:

问题:有什么方法可以找出 WindowsGetSysColor(COLOR_BTNSHADOW)在给定背景颜色的情况下会返回什么?

为了预期我看到的答案CMFCButton允许自定义颜色而不创建整个子类。我再次看到的允许设置每种颜色的微观管理,但不是我正在寻找的高级能力。我可能宁愿坚持我的解决方案,因为它已经在运行,并且适用于 XP 及更高版本。(这是一个免费软件实用程序,所以谁知道旧操作系统用户可能拥有什么。)也就是说,如果有一个CMFCButton解决方案也会引起人们的兴趣。

4

2 回答 2

0

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

于 2019-05-18T23:52:56.463 回答
0

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

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

  • 阴影颜色是 channelvalue / 3 * 2 (同样是整数数学)

示例:R、G 和 B 值为 200 的背景将具有 227 的高光和 132 的阴影。

对于非灰色背景,似乎发生了完全不同的计算。简单地逐个使用上述公式,我得到了非常有用的结果,但最初的问题不是“什么会给出可用的结果”,而是具体的“什么是 Windows 的计算?”

Windows 也有一个暗阴影颜色,在我尝试过的每种颜色中,它总是 0x404040。

于 2019-05-22T05:25:04.760 回答