突出显示时的菜单背景颜色(clHightlightText 不起作用)

Menu background color when highlighted (clHightlightText doesn't work)

我需要做一些自定义绘画,当自定义控件中的项目被按下或悬停时,我想显示突出显示的项目状态。 PS。这是 Windows 2000 的非主题绘画,高对比度(或选择时)更高 OS。

if (State != rsNormal)
    {
    Canvas->Brush->Color = clHighlight ;
    Canvas->Font->Color  = clWhite ; // clHightlightText ;
    }
else
    {
    Canvas->Brush->Color = clBtnFace;
    Canvas->Font->Color  = clBtnText ;
    }

上面的当前代码完全可以满足我的需要但是Font->Colorclwhite当然是我在Win2K,WinXP中看到的情况等等,但它不是系统颜色,我担心 clHighlight 可能是一种与 clWhite.

没有足够对比度的颜色

documentation 提到:clHightlightText,这基本上是我需要的,但我的编译器 C++ Builder 2009 不知道这个系统颜色,而且文档没有提供link因为它(不同于其他颜色)也不好看。

如何获取高亮文本的非硬编码值?

想通了...有根据的猜测

参照我尝试了以下系统颜色的其余部分的文档:

TColor clHightlightText = TColor(clSystemColor | COLOR_HIGHLIGHTTEXT);

这在 Win2K、WinXP 和 Win7 上运行良好 奇怪的是,文档和 C++ Builder 2009 都未能正确执行此操作并且仍然想知道原因是什么?缺少对旧 OS 的支持?不管怎样,从 Win2K 开始,它似乎都能正常工作。

clHighlightText 是正确的用法。它在同一个 $(BCB)\include\vcl\Graphics.hpp 头文件中定义 所有 cl... 颜色常量,包括您正在使用的其他颜色常量:

static const TColor clHighlight = -16777203;
static const TColor clHighlightText = -16777202;
static const TColor clBtnFace = -16777201;
...
static const TColor clBtnText = -16777198;
...
static const TColor clWhite = 16777215;

这些常量已经存在很长时间了,可以追溯到早期的 C++Builder 版本。您的版本 (CB2009) 肯定有它们(上面的定义实际上是从 CB2009 复制的)。