2012-08-08 565 views
30

是否可以更改C#中WinForm标题栏的颜色?更改WinForm中标题栏的颜色

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

您的意思是[标题栏](http://en.wikipedia.org/wiki/Title_bar)或标题栏文本? – 3aw5TZetdf 2012-08-08 10:15:37

+0

是的,我想改变标题栏backcolor ... – Aravind 2012-08-08 10:58:18

+1

注:根据操作系统的版本和用户的配色方案,这可能是一个非常糟糕的主意。至少应考虑颜色方案,将光线和黑暗颠倒过来,并决定如何调整背景颜色以适应这种方案。 – ToolmakerSteve 2016-01-04 22:01:04

回答

14

我解决了这个问题。这是代码:

[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

这是行不通的。标题栏仍然灰色 – SpicyWeenie 2013-10-16 02:53:58

+3

不适用于Windows 8至少 – SpicyWeenie 2013-10-16 03:14:36

+4

在Windows 7上试过。问题是:绿色矩形隐藏窗体标题并最小化/最大化/关闭bottons;不绘制左边界,右边界和底部边界;边框大小取决于特定的Windows版本。无论如何,这是一个有趣的尝试! – bluish 2013-11-14 14:27:00

6

你可以做的是FormBorderStyle属性设置为None,做你想要使用GDI形式什么都。

8

使用Drawing Custom Borders in Windows Forms项目从CodePlex。该项目是一个小型库,它可以扩展Windows窗体,并能够自定义窗口的非客户区域。

+1

CodePlex正在关闭。由于这本质上是一个链接唯一的答案,一旦发生这种情况,它就没有价值。 – IInspectable 2017-08-24 20:45:59

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17137919) – Patrick 2017-08-25 00:02:06

+0

@IInspectable“目前还没有任何计划有档案结束日期。”所以...仍然不是理想的答案,但也不完全没有价值。 – 2017-08-25 08:38:39

-13

这是很容易做到:

  1. 在桌面上单击鼠标右键,然后选择“个性化”。

  2. 点击屏幕底部的“窗口颜色”图标。

  3. 选择你的新颜色。

    如果您的计算机配置为使用Aero主题,则可以选择其中一种标准颜色或混合使用自己的一种颜色。

    如果您使用的是经典主题,则会看到一个可用于设置颜色的“窗口颜色和外观”对话框。点击标题栏中的示例桌面,即“Active Window”,然后使用“Color 1”和“Color 2”下拉框选择一种新颜色。

我只能假设这是你的意思,因为有绝对没有任何借口只改变你的应用程序的标题栏的颜色。这是一个全系统设置的原因。

始终服从用户的喜好。如果他们希望标题栏的颜色不同,他们会选择不同的颜色。

+0

请看我的答案..完美的作品..:) – Aravind 2012-08-21 05:51:45

+27

-1:当程序员想要做某事时,他/她有其原因。答案不能是“没有理由要这样做”。 – ThunderGr 2014-09-02 13:04:38

+0

他/她有的“原因”是错误的或误导的。 – 2014-09-03 03:28:09