2009-12-07 10 views

Respuesta

8

No es posible cambiar el color de una ventana individualmente, pero puede cambiar el color de todo el sistema operativo mediante la configuración. La entrada debería ser algo como esto: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\Swatches junto con HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor

Desde dentro de su código, solo puede ajustar la forma y el tamaño del borde del vidrio, pero no creo que el color. En Windows Forms it is done like esto y en WPF like this.

+0

¿cómo se cambia el color con las teclas de registro? ¿tienes algún código de muestra? : D sobre cómo implementar esto? : D – TheCardinal

2

Esto no es posible con C# /. NET. WPF/WindowsForms solo le permiten cambiar los bordes de los elementos dentro de la aplicación. Los bordes de la aplicación están controlados por el usuario.

2

Mientras que bitbonk y george han señalado correctamente que windows no es capaz de cambiar los colores del borde para ventanas individuales, puede mirar en el dibujo del propietario de la ventana. A continuación, podrá lograr lo que necesita, sin embargo, la ventana probablemente ya no se verá como una ventana "nativa".

Ver this question en SO.

2

TheCardinal: su método de registro no cambia instantáneamente el color y requiere reiniciar el servicio del administrador de ventanas del escritorio. Hay una función API de Windows no documentada que le permite cambiar el color del tema Aero al instante. (Esto es nuevo, un cambio global - se aplica a todas las ventanas)

aunque no tengo el código C# para hacer esto, VB.NET debería ayudar a ya que son esencialmente la misma cosa

<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. 

y finalmente, el WDM_COLORIZATION_PARAMS struct se define como tal (de nuevo en VB.NET, lo siento)

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 

lógica de código sería como sigue:

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

¡Bienvenido a stackoverflow! Siempre puede convertir de C# a VB.NET o viceversa usando [Developer Fusion] (http://www.developerfusion.com/tools/convert/vb-to-csharp/) :) –

Cuestiones relacionadas