微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有效字幕文本颜色 – 检测变化在.Net中

在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);

它返回黑色CaptionMaxCaption

事实上,两者之间几乎所有的颜色都是一样的:

替代文字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] 举报,一经查实,本站将立刻删除。

相关推荐