【发布时间】:2010-11-08 16:20:25
【问题描述】:
我知道我通常应该避免弄乱此类系统设置,但我的应用程序确实已经使用了非标准颜色,我对此没有任何影响。我希望能够在某些地方添加标准的 .NET 控件,但它们的颜色不匹配。我想要一个 hack 来替换这个应用程序的系统颜色。还有一点需要注意的是,它是一个 .NET 应用程序。
到目前为止,我的(不完整的)想法是:
- 用替换的 GetSysColor 创建代理 User32.dll 库,但这会非常繁琐(要重定向 731 个函数,要替换 1 个函数)而且我不知道如何强制我的应用程序使用该特定副本。
- 以某种方式拦截对 GetSysColors 的调用(不幸的是,我认为它位于 CLR 中的某个位置)。
- 以某种方式修改 .NET 类 SystemColors(在内存中?可能吗?)。
您有什么想法,实现这一目标的最佳(和完整)方法是什么?
【问题讨论】:
-
我已经成功连接了 GetSysColor 和 GetSysColorBrush。不幸的是,仅仅为控件着色还不够,我仍然不知道为什么。
-
这还不够,因为 1. Gdi+ 在内部缓存系统颜色值和画笔,您需要清理这些缓存或确保在 Gdi+ 初始化之前进行挂钩。 2.一些控件缓存画笔。这可以通过触摸
control.BackColor = control.BackColor3 等颜色属性来解决。某些控件需要有FlatStyle.Flat才能完全依赖BackColor / ForeColor属性
标签: .net winapi colors user32 systemcolors