gpt4 book ai didi

windows - 获取组框边框的系统颜色

转载 作者:可可西里 更新时间:2023-11-01 09:59:52 27 4
gpt4 key购买 nike

通常标准控件使用的大多数颜色都可以从 GetSysColor 获得,我用所有 COLOR_ 常量 (0-30) 进行了测试,并将其与颜色进行了比较组框边框,但没有一个匹配。我用的是XP,分组框边框的颜色是0xD0D0BF

如何获取用于绘制分组框边框的系统颜色?

最佳答案

使用“经典”主题(在 XP 上,或 Windows 以前版本中唯一的主题),组框边框不是单一颜色。它实际上是一条“ eclipse 刻”线,由两条不同颜色的线组成。这些颜色中的每一种都有一个 COLOR_* 值,但您不想尝试以这种方式重新创建线条。相反,使用 GDI 的 DrawEdge带有 EDGE_ETCHED 标志的功能。

但是如果您启用了主题,则组框边框实际上是一种颜色,并且该颜色会根据所选主题而变化。无法使用 GetSysColor 检索主题颜色,因为它们没有对应的 COLOR_* 值。在构思主题之前很久就发明了该 API。相反,有一整套新的主题 API。您在这里感兴趣的是 GetThemeColor , 但为了使用它你还需要 OpenThemeDataCloseThemeData .

棘手的部分是弄清楚要传递给 OpenThemeData 函数的内容。 This question可能会有所帮助。分组框控件实际上是一种特殊类型的按钮控件,所以你想要的样式是:

  • 类:按钮
  • 部分:BP_GROUPBOX
  • 状态:GBS_NORMAL(也可能是GBS_DISABLED)
  • 属性 ID: TMT_BORDERCOLOR ???

请确保您的代码在禁用主题时具有适当的后备支持!使用 IsAppThemed函数在运行时动态确定并选择适当的绘图代码路径。


编辑: 在 XP VM 上进行一些测试后,我找不到正确的 TMT_* 属性 ID 来指定以获得组框边框的正确颜色.我不确定这是怎么回事。但是您可以使用 DrawThemeBackground 为您绘制边框功能:

HTHEME hTheme = OpenThemeData(grpBox->m_hWnd, L"Button");
DrawThemeBackground(hTheme, hDC, BP_GROUPBOX, GBS_NORMAL, &rcArea, NULL);
CloseThemeData(hTheme);

不幸的是,这并没有告诉您如何获取颜色值本身。

关于windows - 获取组框边框的系统颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com