以编程方式设置标题栏和边框颜色

我试图以编程方式更改我的应用程序的标题栏和边框颜色。 我尝试了很多东西,但没有成功,并决定在系统范围内改变这些颜色。 因为在我的应用程序运行时更改标题栏和边框颜色也是可以接受的,并且在我的应用程序结束时还原它们。 (托pipe环境,运行一小组应用程序)

是否有可能dynamic地改变这些颜色(全过程,或系统范围内,除非过程范围内的变化是可能的)? 你能build议任何方式来实现这一目标吗?

我尝试了类似下面的内容,但是它没有做我想做的事情:

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

提前致谢

编辑

这正是我想要的:

在这里输入图像说明

Solutions Collecting From Web of "以编程方式设置标题栏和边框颜色"

我知道你正在使用C ++,但我很方便与C#。 所以,你可能会有一些想法,看看下面的代码,修改表单外观。

 [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("User32.dll")] private static extern IntPtr GetWindowDC(IntPtr hWnd); protected override void WndProc(ref Message m) { base.WndProc(ref m); const int WM_NCPAINT = 0x85; if (m.Msg == WM_NCPAINT) { IntPtr hdc = GetWindowDC(m.HWnd); if ((int)hdc != 0) { Graphics g = Graphics.FromHdc(hdc); g.FillRectangle(Brushes.Green, new Rectangle(0, 0, 4800, 23)); g.Flush(); ReleaseDC(m.HWnd, hdc); } } } 

另外,您可以在 CodePlex的Windows Forms项目中使用图形自定义边框 。 这个项目是一个小型库,允许用户自定义Windows窗体,比如自定义一个Windows非客户区。

我不建议自定义边框和标题重绘。 这样做很难。 办公室只是在客户区域自己绘制所有东西,但使用正常的边界。 使用NC_PAINT正确的方式是一个痛苦,可能会引入闪烁。 尤其是定位最小化,最大化和关闭按钮是很困难的,因为每个窗口都有不同的表现。 还要考虑到辅助功能,使用更大的字体,自定义用户设置。

什么是改变颜色的目的?

要改变全局颜色,你至少要分离你的代码

//在启动应用程序时调用一次(例如在WM_CREATE中)

 SetSysColors(2, aElements, aNewColors); 

//在关闭应用程序时调用这个(例如在WM_DESTROY中)

 SetSysColors(2, aElements, aOldColors); 

删除第二个SetSysColors(2,aElements,aOldColors); 代码行,恢复到原来的颜色,然后再试一次。 您所看到的代码示例似乎与MSDN链接https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724940%28v=vs.85%29.aspx链接减去睡眠几乎相同。 他们的例子显示了如何设置颜色,睡觉,然后恢复。