2009-06-24 61 views
0

在Vista上,启用了Aero后,窗口的正常模式下的标题文本为黑色(写在轻微的玻璃杯上),而最大化标题为白色在深色玻璃上)。有效字幕文本颜色 - 检测变化(在.Net中)

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

P.S.我在SystemColors.ActiveCaptionTextColor之后编写了一个程序来观看,但在两种模式下它仍然保持不变。

回答

0

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

SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged); 

    void Form1_SystemColorsChanged(object sender, EventArgs e) 
    { 
     //try repainting or refreshing your application 
    } 

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

+0

我查过了。 ActiveCaptionTextColor不会改变:( – 2009-06-24 07:55:44

+0

ActiveCaptionTextColor包含经典主题,而不是航空的颜色 – arbiter 2009-06-24 08:14:10

1

系统颜色实际上并未改变。您所看到的是将Aero 主题应用于窗口。有主题的API可以抓住主题特定的颜色,但我的经验一直不如使用它们的恒星。

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

1

我不能让VisualStyleRenderer告诉我任何东西。

您可以选择之间:

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

除了它实际上没有工作。如果你问一个活跃的最大化窗口的标题文本颜色:

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

它返回黑色,对于标题MaxCaption

事实上,几乎所有的颜色,两者之间是相同的:

alt text http://i41.tinypic.com/3994h.jpg

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

0

关于VisualStyleRenderer根据建议,它可能是值得一提,那显然是最大化的窗口标题是专门由Vista的DWM(桌面窗口管理器)的性能的原因进行处理,请参阅Raymond Chen's explanation的(一些)的细节。

现在,我还没有偷看到Aero主题本身,但它实际上可能定义正常和最大化的标题相同的文字颜色,后者只是没有正在使用DWM。

这就是说我会猜测Vista中的字幕文字颜色确实是由主题正常窗口的VisualStyleElement.Window.Caption.Active确定的,但前者仅为最大化窗口的SystemColors.ActiveCaptionTextColor;不幸的是,你已经发现,事实并非如此。

因此,也许DWM只是在渲染最大化窗口标题时应用内部默认值?如果出现这种情况,您无法通过设计检测字幕文本颜色更改,而是需要先观察最大化的窗口状态,然后在本地应用DWM默认值。