Изменение цвета строки заголовка в WinForm

Можно ли изменить цвет строки заголовка WinForm на C #?

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

person Aravind    schedule 08.08.2012    source источник
comment
Вы имеете в виду строку заголовка или текст строки заголовка?   -  person matthewr    schedule 08.08.2012
comment
да, я хочу изменить цвет фона строки заголовка ...   -  person Aravind    schedule 08.08.2012
comment
ПРИМЕЧАНИЕ: в зависимости от версии ОС и цветовой схемы пользователя это может быть очень плохой идеей. Как минимум, рассмотрите цветовые схемы, в которых светлый и темный перевернуты, и решите, как вы адаптируете цвет фона, чтобы он соответствовал таким схемам.   -  person ToolmakerSteve    schedule 05.01.2016


Ответы (4)


Я решил эту проблему. Это код:

[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);
        }
    }
}
person Aravind    schedule 18.08.2012
comment
Пробовал на Windows 7. Проблемы следующие: зеленый прямоугольник скрывает заголовок формы и минимизирует / максимизирует / закрывает основания; не закрашивает левую, правую и нижнюю границы; размер границ зависит от конкретной версии Windows. В любом случае попытка интересная! - person bluish; 14.11.2013
comment
у меня не работает в Windows 10 64bit, у кого-нибудь есть обходной путь? - person Anirudha Gupta; 17.05.2018

Что вы можете сделать, так это установить для свойства FormBorderStyle значение None и делать все, что вы хотите, с формой, используя GDI.

person Asif Mushtaq    schedule 08.08.2012

Если вы хотите, чтобы строка заголовка отличалась от других, рассмотрите возможность получения лицензии сообщества для этого

Я попробовал один раз, и это сработало. Мне просто нужно было установить его и поменять Form на SfForm

Это оператор использования

using Syncfusion.WinForms.Controls;

Ссылки для WinForms: Syncfusion.Core.WinForms и Syncfusion.Shared.Base

person Community    schedule 14.02.2020

Это легко сделать:

  1. Щелкните правой кнопкой мыши на рабочем столе и выберите «Персонализировать».

  2. Щелкните плитку «Цвет окна» внизу экрана.

  3. Выбери свой новый цвет.

    Если ваш компьютер настроен на использование темы Aero, вы можете выбрать один из стандартных цветов или смешать свой собственный.

    Если вы используете классическую тему, вы увидите диалоговое окно «Цвет и внешний вид окна», которое можно использовать для установки цветов. Щелкните в строке заголовка на образце рабочего стола, который называется «Активное окно», а затем используйте раскрывающиеся поля «Цвет 1» и «Цвет 2», чтобы выбрать новый цвет.

Я могу только предположить, что это именно то, что вы имели в виду, потому что нет абсолютно оправдания, чтобы изменить только цвет строки заголовка вашего приложения. Есть причина, по которой это общесистемная настройка.

Всегда соблюдайте предпочтения пользователя. Если бы они хотели, чтобы ваша строка заголовка была другого цвета, они бы выбрали другой цвет.

person Cody Gray    schedule 09.08.2012
comment
-1: Когда программист хочет что-то сделать, у него есть свои причины. Ответа быть не может: нет оправдания желанию сделать это. - person ThunderGr; 02.09.2014
comment
Причины, по которым он / она / она, ошибочны или ошибочны. - person Cody Gray; 03.09.2014
comment
Это не вам судить. Вы либо помогаете, либо не помогаете. Вы можете оставить комментарий к его вопросу, чтобы высказать свое мнение. Ваше мнение - бесполезный ответ. - person ThunderGr; 04.09.2014
comment
Это не ответ на вопрос. (Я согласен с тем, что делать то, что задает вопрос, - действительно плохая идея, но это другое обсуждение. Или, как уже указывалось, это комментарий, а не ответ.) - person ToolmakerSteve; 05.01.2016
comment
Поводом для этого являются требования организации / клиента. Да, они могут ошибаться, но они никогда не ошибаются, даже если они ошибаются :) - person Craig Brett; 01.09.2016
comment
Для моего приложения он должен быть темным, НЕЗАВИСИМО от общесистемных настроек. Кто ты такой, чтобы говорить мне, как писать программы? - person EmpathicSage; 04.06.2020
comment
Я уже сделал это, и для некоторых форм это работает, например, в блокноте, но для моего приложения, которое я написал в VS winforms, это не так. Любые идеи ? - person GuidoG; 10.06.2021