在Vista上,启用了Aero后,窗口的正常模式下的标题文本为黑色(写在轻微的玻璃杯上),而最大化标题为白色在深色玻璃上)。有效字幕文本颜色 - 检测变化(在.Net中)
如何确定窗口标题的当前颜色?
P.S.我在SystemColors.ActiveCaptionTextColor
之后编写了一个程序来观看,但在两种模式下它仍然保持不变。
在Vista上,启用了Aero后,窗口的正常模式下的标题文本为黑色(写在轻微的玻璃杯上),而最大化标题为白色在深色玻璃上)。有效字幕文本颜色 - 检测变化(在.Net中)
如何确定窗口标题的当前颜色?
P.S.我在SystemColors.ActiveCaptionTextColor
之后编写了一个程序来观看,但在两种模式下它仍然保持不变。
为什么不尝试在您的表单中听SystemColorsChanged事件?
SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged);
void Form1_SystemColorsChanged(object sender, EventArgs e)
{
//try repainting or refreshing your application
}
我知道这不是确切的解决方案,但您可以从这里开始工作。
系统颜色实际上并未改变。您所看到的是将Aero 主题应用于窗口。有主题的API可以抓住主题特定的颜色,但我的经验一直不如使用它们的恒星。
更新来自评论: 看看VisualStyleRenderer和GetColor方法。
我不能让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
我的猜测是,有没有办法让你的应用程序具有相同的外观和感觉的操作系统。
关于VisualStyleRenderer
根据建议,它可能是值得一提,那显然是最大化的窗口标题是专门由Vista的DWM(桌面窗口管理器)的性能的原因进行处理,请参阅Raymond Chen's explanation的(一些)的细节。
现在,我还没有偷看到Aero主题本身,但它实际上可能定义正常和最大化的标题相同的文字颜色,后者只是没有正在使用DWM。
这就是说我会猜测Vista中的字幕文字颜色确实是由主题正常窗口的VisualStyleElement.Window.Caption.Active
确定的,但前者仅为最大化窗口的SystemColors.ActiveCaptionTextColor
;不幸的是,你已经发现,事实并非如此。
因此,也许DWM只是在渲染最大化窗口标题时应用内部默认值?如果出现这种情况,您无法通过设计检测字幕文本颜色更改,而是需要先观察最大化的窗口状态,然后在本地应用DWM默认值。
我查过了。 ActiveCaptionTextColor不会改变:( – 2009-06-24 07:55:44
ActiveCaptionTextColor包含经典主题,而不是航空的颜色 – arbiter 2009-06-24 08:14:10