【发布时间】:2009-12-07 10:26:41
【问题描述】:
【问题讨论】:
【问题讨论】:
无法单独更改窗口的颜色,但您可以通过注册表更改整个操作系统的颜色。条目应该是这样的:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\Swatches 和 HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor
在您的代码中,您只能调整 Glass 边框的形状和大小,但我不认为是颜色。在Windows Forms it is done like 这个和WPF like this。
【讨论】:
这在 C#/.NET 中是不可能的。 WPF/WindowsForms 只允许您更改应用程序内元素的边框。应用程序边界由用户控制。
【讨论】:
虽然 bitbonk 和 george 已经正确地指出窗口不能更改单个窗口的边框颜色,但您可能会考虑使用所有者绘制窗口。然后,您可能能够实现所需的功能,但是,该窗口很可能不再像“本机”窗口了。
请参阅 SO 上的 this question。
【讨论】:
TheCardinal:您的注册表方法不会立即更改颜色,并且需要重新启动桌面窗口管理器服务。 有一个未记录的 windows API 函数允许您立即更改 Aero 主题的颜色。 (这又是一个全局更改 - 适用于所有窗口)
虽然我没有 C# 代码来执行此操作,但 VB.NET 应该可以帮助您,因为它们本质上是相同的
<DllImport("dwmapi.dll", EntryPoint:="#127", PreserveSig:=False)> _
Public Shared Sub DwmGetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS)
End Sub
//this above function GETS the color, and stores it in parameters.
<DllImport("dwmapi.dll", EntryPoint:="#131", PreserveSig:=False)> _
Public Shared Sub DwmSetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS, ByVal uUnknown As UInteger)
End Sub
//this above function SETS the color, and stores it in parameters.
最后,结构 WDM_COLORIZATION_PARAMS 被这样定义(再次在 VB.NET 中,抱歉)
Public Structure WDM_COLORIZATION_PARAMS
Public Color1 As Int32
Public Color2 As Int32
Public Intensity As Int32
Public Unknown1 As Int32
Public Unknown2 As Int32
Public Unknown3 As Int32
Public Opaque As Long
End Structure
代码逻辑如下:
WDM_COLORIZATION_PARAMS temp = getColor();
temp.Color1 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb();
temp.Color2 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb();
setColor(temp);
【讨论】: