我正在尝试以编程方式更改应用程序的标题栏和边框颜色。我尝试了很多东西,但没有成功,并决定在整个系统中更改这些颜色。因为我可以在应用程序运行时更改标题栏和边框颜色,并在应用程序结束时将其还原。 (托管环境,运行少量应用程序)
是否可以动态更改这些颜色(整个过程或整个系统,除非可以进行全过程的更改)?你能提出任何方法来实现这个目标吗?
我尝试了类似下面的内容,但它没有做我想要的事情:
int aElements[2] = {COLOR_WINDOW, COLOR_ACTIVECAPTION};
DWORD aOldColors[2];
DWORD aNewColors[2];
aOldColors[0] = GetSysColor(aElements[0]);
aOldColors[1] = GetSysColor(aElements[1]);
aNewColors[0] = RGB(0x80, 0x80, 0x80); // light gray
aNewColors[1] = RGB(0x80, 0x00, 0x80); // dark purple
SetSysColors(2, aElements, aNewColors);
SetSysColors(2, aElements, aOldColors);
提前致谢
修改
这正是我想要的:
答案 0 :(得分:4)
我不建议自定义边框和标题重绘。 以正确的方式去做真的很难。 Office只是在客户区域中自行绘制所有内容,但使用普通边框。 使用NC_PAINT正确的方法是一种痛苦,可能会引入闪烁。 特别是定位最小化,最大化和关闭按钮很困难,因为每个窗口都有不同的方式。 还要考虑辅助功能,使用较大的字体,自定义用户设置。
改变颜色的目的是什么?
要更改全局颜色,至少要分开代码
//在你的应用程序启动时调用一次(例如在WM_CREATE中)
SetSysColors(2, aElements, aNewColors);
//关闭应用程序时调用此方法(例如在WM_DESTROY中)
SetSysColors(2, aElements, aOldColors);
答案 1 :(得分:2)
删除第二个SetSysColors(2,aElements,aOldColors);代码行,它恢复为原始颜色,然后再试一次。您拥有的代码示例似乎与MSDN链接https://msdn.microsoft.com/en-us/library/windows/desktop/ms724940%28v=vs.85%29.aspx链接减去睡眠几乎完全相同。他们的例子展示了如何设置颜色,睡眠然后恢复。