изменение цвета дочерних окон MDI под Windows 7 - PullRequest
1 голос
/ 25 августа 2009

У меня есть приложение MDI, написанное на C ++, которое отлично выглядит под Windows XP. Все дочерние окна MDI выглядят как родительские окна. Ницца. Тем не менее, в Windows 7 (и, вероятно, Vista) родительские окна имеют Aero Glass, а дочерние окна имеют этот отвратительный неизменяемый голубой цвет (такой же, как тема Windows 7 Basic). Так что мое приложение действительно выглядит очень и очень плохо.

Вы можете увидеть то же самое уродливое поведение, запустив Office 2003 и попробовав посмотреть на дочерние окна MDI (возможно, в Excel). Тем не менее, Office 2007 на самом деле имеет три цветовые темы - синий, серебристый и черный. Эти темы как-то переносятся в дочерние окна MDI в Excel.

Я не знаю, как Microsoft делает это в Office 2007. Мне бы очень хотелось узнать хитрость. Мне нужно перехватить и перенести рисунок моих дочерних окон MDI и повторить то, что удалось сделать команде Office 2007. Проблема заключается в том, что я хочу использовать все вызовы DrawTheme *, чтобы правильно рисовать градиенты, закругленные края и кнопки. И все эти системные вызовы нуждаются в дескрипторе темы. Но, кажется, невозможно использовать, например, SetWindowTheme, чтобы изменить цветовую схему из другой темы. По крайней мере, насколько я могу судить.

Кто-нибудь знает, как Microsoft достигла этого?

1 Ответ

1 голос
/ 27 августа 2009

Это не очень хорошее решение, но, разыскивая в Интернете, я нашел эту статью о том, как придать WinXP округленный вид квадратному плоскому стилю окна Win95 / Win98 / Win2k. Он работает с использованием снимков BMP темы WinXP, а затем с помощью функций bitblit, чтобы растянуть их до соответствующих размеров вокруг границы рамки окна. Я попробовал его демонстрационное программное обеспечение, и, конечно же, похоже, что WinXP Luna под Win7. Я могу использовать его пример в качестве основы для подключения и замены моего чертежа дочернего окна MDI.

Проблема с этим подходом заключается в том, что вы либо должны выбрать ширину заголовка и придерживаться его, а не реагировать на глобальные корректировки темы, которые изменяют высоту заголовка, либо вам нужно сделать много разных снимков BMP разных размеров. Для моих целей, вероятно, хорошо просто придерживаться одной толщины и игнорировать пользовательские настройки темы. Оказавшись на месте, я могу применять различные темы, просто снимая их с помощью BMP, так что я могу также применить дочерний вид Office 2007 MDI.

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