У меня есть приложение 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 достигла этого?