在Vista上,启用Aero后,正常模式下的窗口标题为黑色文字(略写浅色玻璃),最大化时标题为白色(写在深色玻璃上)。
如何确定窗口标题的当前颜色?
P.S。我写了一个程序,在SystemColors.ActiveCaptionTextColor
之后观看,但它在两种模式下保持不变。
答案 0 :(得分:1)
系统颜色实际上没有变化。您所看到的是将Aero 主题应用到窗口中。有一些主题API可用于获取主题特定的颜色,但我的经验不如使用它们。
评论更新: 看一下VisualStyleRenderer和GetColor方法。
答案 1 :(得分:1)
我无法让VisualStyleRenderer告诉我任何事情。
您可以选择:
因为 MaxCaption 为最大化窗口的标题栏的每个状态提供了VisualStyleElement对象。
除非它实际上不起作用。如果您要求激活的最大化窗口的标题文本颜色:
VisualStyleRenderer renderer =
new VisualStyleRenderer(VisualStyleElement.Window.MaxCaption.Active);
Color c = renderer.GetColor(ColorProperty.TextColor);
对于标题和 MaxCaption ,它返回黑色。
事实上,两者之间的几乎所有颜色都是相同的:
我的猜测是,没有办法让你的应用程序具有与操作系统相同的外观和感觉。
答案 2 :(得分:0)
为什么不尝试在表单中收听SystemColorsChanged事件?
SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged);
void Form1_SystemColorsChanged(object sender, EventArgs e)
{
//try repainting or refreshing your application
}
我知道这不是确切的解决方案,但你可以从这里开始工作。
答案 3 :(得分:0)
关于基于VisualStyleRenderer
的建议可能值得注意,出于性能原因,显然最大化的窗口字幕由Vista DWM(桌面窗口管理器)专门处理,有关(某些)详细信息,请参阅Raymond Chen's explanation
现在,我还没有看到Aero主题本身,但它实际上可能为正常和最大化标题定义相同的TextColor,后者只是没有被DWM使用。
那说我猜想Vista中的字幕文本颜色确实由VisualStyleElement.Window.Caption.Active
确定为主题正常窗口,而前SystemColors.ActiveCaptionTextColor
仅用于最大化窗口;不幸的是,你已经发现情况并非如此。
那么DWM可能只是在渲染最大化窗口字幕时应用内部默认值?如果是这种情况,您无法“按设计”检测到标题文本颜色更改,而是需要依靠观察最大化窗口状态并在本地应用DWM默认值。