在Vista上,启用了Aero后,标准模式下的窗口标题为黑色文字(写在轻微的玻璃杯上),而最大化标题为白色(写在黑色玻璃上)。
我怎样才能确定窗口标题的当前颜色?
PS我写了一个程序来观看SystemColors.ActiveCaptionTextColor后,但在两种模式下保持不变。
如何使应用程序运行在任何Windows版本没有额外的库?
如何在我的.NET应用程序中find用户的字体?
当创build一个新线程时,对GUI的更改没有被制作(C#)
净运行时间错误:.NET运行时2.0错误 – 事件ID:1000崩溃我的程序。 是什么造成的?
如何修改正在使用的DLL?
切换RIDEV_CAPTUREMOUSE |时出现奇怪的行为 RIDEV_NOLEGACY
Windows从多图标文件中select错误的图标,并自我渲染以更正大小
获取桌面/ shell窗口的句柄
格式化用户input的货币
如何在.net中为Windows服务设置ACL?
系统颜色实际上并没有改变。 你所看到的是Aero 主题在窗口中的应用。 有主题API可以抓住主题特定的颜色,但我的经验一直不如恒星使用它们。
从注释更新:看看VisualStyleRenderer和GetColor方法。
我不能让VisualStyleRenderer告诉我任何事情。
您可以选择:
VisualStyleElement.Window.Caption.Active
VisualStyleElement.Window.MaxCaption.Active
因为MaxCaption 为最大化窗口的标题栏的每个状态提供了VisualStyleElement对象。
除了它实际上不工作。 如果您要求激活最大化窗口的标题文本颜色:
VisualStyleRenderer renderer = new VisualStyleRenderer(VisualStyleElement.Window.MaxCaption.Active); Color c = renderer.GetColor(ColorProperty.TextColor);
它返回黑色 , Caption和MaxCaption 。
事实上,两者之间几乎所有的颜色都是一样的:
替代文字http://img.zgserver.com/windows/3994h.png
我的猜测是,没有办法让你的应用程序具有与操作系统相同的外观和感觉。
你为什么不尝试在窗体中监听SystemColorsChanged事件?
SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged); void Form1_SystemColorsChanged(object sender,EventArgs e) { //try repainting or refreshing your application }
我知道这不是确切的解决方案,但你可以从这里开始工作。
关于基于VisualStyleRenderer的建议,可能值得注意的是,出于性能原因,显然最大化的窗口标题由Vista DWM(桌面窗口管理器)专门处理,请参阅Raymond Chen对某些细节的解释 。
现在,我还没有偷看到Aero主题本身,但它可能实际上为正常和最大化的标题定义了相同的TextColor,后者只是没有被DWM使用。
这就是说,我会猜想Vista中的字幕文本颜色的确是由VisualStyleElement.Window.Caption.Active为主题的正常窗口,但前者SystemColors.ActiveCaptionTextColor为最大化窗口; 不幸的是,你已经发现,事实并非如此。
所以也许DWM只是在渲染最大化的窗口标题时应用内部默认值? 如果是这种情况,则无法检测字幕文本颜色是否按设计改变,而是需要依据观察最大化的窗口状态,并在本地应用DWM默认值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。