2012-08-08 149 views
30

¿Es posible cambiar el color de la barra de título de un WinForm en C#?Cambiar el color de la barra de título en WinForm

  __________________________ 
     [Form1_______________-|[]|X] <- I want to change the color of this 
     |       | 
     |       | 
     |       | 
     |__________________________| 
+0

¿Quiere decir la [barra de título] (http://en.wikipedia.org/wiki/Title_bar) o el texto de la barra de título? – 3aw5TZetdf

+0

sí, quiero cambiar la barra de título backcolor ... – Aravind

+1

NOTA: según la versión del sistema operativo y el esquema de color del usuario, esta puede ser una muy mala idea. Como mínimo, considere los esquemas de color en los que se invierte la luz y la oscuridad, y decida cómo va a adaptar el color de fondo para que se ajuste a dichos esquemas. – ToolmakerSteve

Respuesta

14

He resuelto este problema. Este es el código:

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

Esto no funciona. Barra de título todavía gris – SpicyWeenie

+3

No funciona para Windows 8 al menos – SpicyWeenie

+4

Probado en Windows 7. Los problemas son los siguientes: el rectángulo verde oculta el título del formulario y minimiza/maximiza/cierra los botones; no pinta los bordes izquierdo, derecho e inferior; el tamaño de los bordes depende de la versión específica de Windows. De todos modos es un intento interesante! – bluish

6

Lo que puede hacer es establecer la propiedad FormBorderStyle-None y hacer cualquier cosa que quiera con el formulario utilizando GDI.

8

Usar Drawing Custom Borders in Windows Forms proyecto desde CodePlex. Este proyecto es una pequeña biblioteca que amplía Windows Forms con la capacidad de personalizar el área no cliente de Windows.

+1

CodePlex se está cerrando. Como esto es esencialmente una respuesta de solo enlace, no tendrá valor una vez que eso suceda. – IInspectable

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/17137919) – Patrick

+0

@IInspectable "Actualmente no hay ningún plan para tener una fecha de finalización para el archivo". Entonces ... todavía no es una respuesta ideal, pero tampoco completamente inútil. –

-13

Esto es fácil de hacer:

  1. Haga clic derecho en el escritorio, y seleccione "Personalizar".

  2. Haga clic en el mosaico "Color de la ventana" en la parte inferior de la pantalla.

  3. Elija su nuevo color.

    Si su computadora está configurada para usar el tema Aero, puede elegir entre uno de los colores estándar o mezclar uno propio.

    Si está utilizando el tema clásico, verá el cuadro de diálogo "Color de ventana y apariencia" que puede usar para establecer los colores. Haga clic en la barra de título del escritorio de muestra, la llamada "Ventana activa", y luego use los cuadros desplegables "Color 1" y "Color 2" para elegir un nuevo color.

Sólo puedo suponer que esto es lo que quería decir, porque no hay absolutamente ninguna excusa para cambiar sólo el color de la barra de título de la aplicación. Hay una razón por la cual esta es una configuración de todo el sistema.

Siempre obedezca las preferencias del usuario. Si querían que tu barra de título fuera de un color diferente, elegirían un color diferente.

+0

Pls ver la respuesta mía ... funciona a la perfección ...:) – Aravind

+27

-1: Cuando un programador quiere hacer algo, tiene sus razones. La respuesta no puede ser "no hay excusa para querer hacer eso". – ThunderGr

+0

Las "razones" que tiene son erróneas o están mal orientadas. –

Cuestiones relacionadas