代码之家  ›  专栏  ›  技术社区  ›  bohdan_trotsenko

活动标题文本颜色检测更改(在.Net中)

  •  0
  • bohdan_trotsenko  · 技术社区  · 17 年前

    在Vista中,在启用AIR的情况下,正常模式下的窗口标题有黑色文本(在略微轻的玻璃上书写),而当标题最大化时则为白色(用暗玻璃书写)。

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

    P、 我写了一个节目 SystemColors.ActiveCaptionTextColor ,但在两种模式下保持不变。

    4 回复  |  直到 10 年前
        1
  •  1
  •   Paul Alexander    17 年前

    系统颜色实际上不会改变。你看到的是空气动力的应用 主题 对着窗户。有主题api可用于获取主题特定的颜色,但我的经验是不太恒星使用它们。

    从评论更新: 看看 VisualStyleRenderer 以及GetColor方法。

        2
  •  1
  •   Glorfindel Doug L.    7 年前

    我也不能让visualstyle渲染器告诉我任何事情。

    您可以选择:

    因为 最大标题 最大化 窗户。

    但实际上没用。如果要求激活最大化窗口的标题文本颜色:

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

    它又回来了 黑色 ,对于两者 解说词 最大标题 .

    事实上,几乎所有的颜色都是相同的:

    alt text

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

        3
  •  0
  •   TheVillageIdiot    17 年前

    你为什么不听听 SystemColorsChanged 以你的形式出现的事件?

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

    我知道这不是确切的解决办法,但你可以从这里开始工作。

        4
  •  0
  •   Steffen Opel Norm Johanson    17 年前

    关于 VisualStyleRenderer 基于这些建议,值得注意的是,由于性能原因,显然最大化的窗口标题是由Vista DWM(桌面窗口管理器)处理的,参见 Raymond Chen's explanation 一些细节。

    现在,我还没有窥视到航空主题本身,但它可能实际上定义了相同的文本颜色的正常和最大化字幕,后者只是不被使用的DWM。

    也就是说,我猜Vista中的字幕文本颜色实际上是由 VisualStyleElement.Window.Caption.Active 对于主题化的普通窗口,但前者 SystemColors.ActiveCaptionTextColor 只为最大化窗口;不幸的是,你已经知道这也不是事实。

    那么,DWM可能在渲染最大化窗口标题时应用内部默认值吗?如果是这样的话,你无法通过设计来检测字幕文本颜色变化,而是需要观察最大化窗口状态,并在本地应用DWM默认值。