更改 WinForm 中标题栏的颜色

Posted

技术标签:

【中文标题】更改 WinForm 中标题栏的颜色【英文标题】:Changing the color of the title bar in WinForm 【发布时间】:2012-08-05 10:23:34 【问题描述】:

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

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

【问题讨论】:

您是指title bar 还是标题栏文字? 是的,我想更改标题栏背景色... 注意:根据操作系统的版本和用户的配色方案,这可能是一个非常糟糕的主意。至少要考虑明暗颠倒的配色方案,并决定如何调整背景颜色以适应此类方案。 这能回答你的问题吗? WinForms Dark title bar on Windows 10 @Matt 那是 Win10 特有的。这不是(并且每个解决方案都不适用于其他解决方案)。 【参考方案1】:

您可以将FormBorderStyle 属性设置为None,然后使用GDI 对表单做任何您想做的事情。

【讨论】:

这会从表单中删除所有内容,留下一个填充的矩形。然后一切都由你来实施——你完全从头开始。也许对全屏运行的游戏设计有好处,但对其他任何事情都无用。【参考方案2】:

这很容易做到:

    右键单击桌面,然后选择“个性化”。

    单击屏幕底部的“窗口颜色”图块。

    选择你的新颜色。

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

    如果您使用的是经典主题,您会看到一个“窗口颜色和外观”对话框,您可以使用它来设置颜色。单击示例桌面的标题栏,名为“活动窗口”,然后使用“颜色 1”和“颜色 2”下拉框选择一种新颜色。

我只能假设这就是您的意思,因为绝对没有任何借口可以只更改应用程序标题栏的颜色。这是系统范围的设置是有原因的。

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

【讨论】:

-1:当程序员想做某事时,他/她有它的理由。答案不能是“没有理由想要这样做”。 他/她/它的“理由”是错误的或被误导的。 这不是你判断的。你要么帮忙,要么不帮忙。你可以对他的问题发表评论,告诉他你的意见。您的判断不是有用的答案。 这不是问题的答案。 (我同意按照问题的要求去做是一个非常糟糕的主意,但这是一个不同的讨论。或者正如所指出的,是评论,而不是答案。) 组织/客户要求是这样做的一个理由。是的,他们可能会被误导,但他们永远不会错,即使他们是:)【参考方案3】:

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

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

【讨论】:

在 Windows 7 上试过。问题是:绿色矩形隐藏表单标题和最小化/最大化/关闭按钮;不绘制左、右和下边框;边框大小取决于特定的 Windows 版本。无论如何,这是一次有趣的尝试! 在 Windows 10 64bit 中对我不起作用,有人有解决方法吗?【参考方案4】:

如果您想拥有与其他人不同的标题栏,请考虑获得this 的社区许可证

我试过一次,它成功了。我只需要安装它并将Form更改为SfForm

这是 using 语句

using Syncfusion.WinForms.Controls;

WinForms 的引用是Syncfusion.Core.WinFormsSyncfusion.Shared.Base

【讨论】:

以上是关于更改 WinForm 中标题栏的颜色的主要内容,如果未能解决你的问题,请参考以下文章

怎么样让winform标题栏的文字居中?

如何更改 Windows 窗体中标题栏中的文本?

如何改变winform(c#)标题栏的颜色

如何更改 iPhone 应用程序中状态栏的颜色? [复制]

如何拖动无标题栏的MFC单文档应用程序的窗口?

怎么让标题栏上的字变大来?