Active Caption Text Color - обнаружение изменений (в .Net) - PullRequest
0 голосов
/ 24 июня 2009

В Vista с включенной функцией Aero заголовок окна в обычном режиме имеет текст черного цвета (написанный на слегка светлом стекле), а при максимальном увеличении заголовок - белого цвета (написанный поверх темного стекла).

Как определить текущий цвет заголовка окна?

P.S. Я написал программу для просмотра после SystemColors.ActiveCaptionTextColor, но она остается неизменной в двух режимах.

Ответы [ 4 ]

1 голос
/ 24 июня 2009

Цвет системы фактически не меняется. То, что вы видите, - это применение темы Aero theme к окну. Существуют API тем, позволяющие получить определенные цвета темы, но мой опыт работы с ними был не просто великолепен.

ОБНОВЛЕНИЕ ОТ КОММЕНТАРИЙ: Взгляните на VisualStyleRenderer и метод GetColor.

1 голос
/ 30 июня 2009

Я тоже не могу заставить VisualStyleRenderer сказать мне что-нибудь.

Вы можете выбрать между:

Поскольку MaxCaption предоставляет объекты VisualStyleElement для каждого состояния строки заголовка развернутого окна .

За исключением того, что это на самом деле не работает. Если вы запрашиваете цвет текста заголовка активного развернутого окна:

VisualStyleRenderer renderer = 
   new VisualStyleRenderer(VisualStyleElement.Window.MaxCaption.Active);
Color c = renderer.GetColor(ColorProperty.TextColor);

Возвращает черный как для Caption , так и MaxCaption .

Фактически, почти все цвета одинаковы между двумя:

alt text

Я предполагаю, что нет никакого способа сделать ваше приложение таким же, как операционная система.

0 голосов
/ 06 июля 2009

Что касается предложений на основе VisualStyleRenderer, то, возможно, стоит отметить, что явно увеличенные заголовки окон обрабатываются Vista DWM (диспетчером окон рабочего стола) специально для повышения производительности, см. Объяснение Раймонда Чена для некоторых ) подробности.

Теперь я не заглядывал в саму тему Aero, но на самом деле она может определять один и тот же TextColor как для обычного, так и для развернутого заголовка, причем последний просто не используется DWM.

Тем не менее, я бы предположил, что цвет текста заголовков в Vista действительно определяется VisualStyleElement.Window.Caption.Active для тематических нормальных окон, а прежний SystemColors.ActiveCaptionTextColor только для развернутых окон; к сожалению, вы уже поняли, что это не так.

Так, может быть, DWM просто применяет внутреннее значение по умолчанию при отображении развернутых заголовков окна? В этом случае вы не можете обнаружить изменение цвета текста заголовка «по дизайну», скорее, вам придется прибегнуть к наблюдению максимизированного состояния окна как такового и применить DWM по умолчанию локально.

0 голосов
/ 24 июня 2009

почему бы вам не попробовать прослушать SystemColorsChanged событие в вашей форме?

    SystemColorsChanged += new EventHandler(Form1_SystemColorsChanged);

    void Form1_SystemColorsChanged(object sender, EventArgs e)
    {
        //try repainting or refreshing your application
    }

Я знаю, что это не точное решение, но вы можете начать работать отсюда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...