2009-08-25 4 views
1

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

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

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

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

ответ

1

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

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

+0

Мне очень нравится делать что-то подобное, так как оно нарушает стандарты графического интерфейса пользователя, но я даже не должен был об этом думать, если бы Microsoft предоставила некоторую возможность настроить цвета детей MDI под Windows 7. – dsmtoday

Смежные вопросы