【问题标题】:Active Caption Text Color — detect change (in .Net)Active Caption Text Color — 检测变化(在 .Net 中)
【发布时间】:2010-11-05 10:26:11
【问题描述】:

在启用 Aero 的 Vista 上,正常模式下的窗口标题具有黑色文本(写在浅色玻璃上),而最大化时标题为白色(写在深色玻璃上)。

如何确定窗口标题的当前颜色?

附:在SystemColors.ActiveCaptionTextColor之后我写了一个程序来观看,但是在两种模式下都一样。

【问题讨论】:

    标签: .net windows user-interface colors


    【解决方案1】:

    系统颜色实际上并没有改变。您看到的是 Aero 主题 在窗口中的应用。有一些主题 API 可用于获取主题特定的颜色,但我的使用经验并不那么出色。

    评论更新: 看看VisualStyleRenderer 和 GetColor 方法。

    【讨论】:

    • 我将玻璃效果应用于所有窗口。它显示一个饼图和一些统计数据,玻璃效果使窗口看起来很酷很漂亮......直到它被最大化。这个想法是将文本的前景色绑定到标题的当前颜色,这与玻璃效果保持一致。
    • VisualStyleRenderer 应该可以帮助解决这个问题。
    • 请帮我找出到底是哪一个。要么我错过了明显的东西,要么看错了地方,要么......
    【解决方案2】:

    我也不能让 VisualStyleRenderer 告诉我任何事情。

    您可以选择:

    因为 MaxCaption 最大化 窗口的标题栏的每个状态提供 VisualStyleElement 对象。

    除非它实际上不起作用。如果您询问活动最大化窗口的标题文本颜色:

    VisualStyleRenderer renderer = 
       new VisualStyleRenderer(VisualStyleElement.Window.MaxCaption.Active);
    Color c = renderer.GetColor(ColorProperty.TextColor);
    

    它为 CaptionMaxCaption 返回 black

    其实两者之间几乎所有的颜色都是一样的:

    我的猜测是,没有办法让您的应用程序具有与操作系统相同的外观和感觉。

    【讨论】:

      【解决方案3】:

      您为什么不尝试在表单中侦听SystemColorsChanged 事件?

          SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged);
      
          void Form1_SystemColorsChanged(object sender, EventArgs e)
          {
              //try repainting or refreshing your application
          }
      

      我知道这不是确切的解决方案,但您可以从这里开始工作。

      【讨论】:

      • 我已经检查过了。 ActiveCaptionTextColor 不会改变 :(
      • ActiveCaptionTextColor 包含来自经典主题的颜色,而不是 aero。
      【解决方案4】:

      关于基于VisualStyleRenderer 的建议,可能值得注意的是,出于性能原因,显然最大化的窗口标题由 Vista DWM(桌面窗口管理器)专门处理,请参阅Raymond Chen's explanation 了解(某些)详细信息。

      现在,我还没有深入了解 Aero 主题本身,但它实际上可能为正常和最大化标题定义了相同的 TextColor,而后者只是没有被 DWM 使用。

      也就是说我猜想Vista中的字幕文本颜色确实是由VisualStyleElement.Window.Caption.Active决定的主题普通窗口,但前SystemColors.ActiveCaptionTextColor只适用于最大化窗口;不幸的是,您已经发现事实并非如此。

      所以也许 DWM 只是在渲染最大化的窗口标题时应用一个内部默认值?如果是这种情况,您无法检测到“设计”的标题文本颜色变化,而是需要依靠观察最大化的窗口状态并在本地应用 DWM 默认值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 2022-10-25
        • 2015-02-12
        • 2015-08-27
        相关资源
        最近更新 更多