У меня есть MDI-приложение, написанное на C++, которое отлично работает под Windows XP. Все дочерние окна MDI в конечном итоге выглядят как их родительские окна. Хороший. Однако в Windows 7 (и, возможно, в Vista) родительские окна имеют аэродинамическое стекло, а дочерние окна имеют этот отвратительный неизменяемый голубой цвет (такой же, как тема Windows 7 Basic). Так что мое приложение действительно выглядит очень-очень плохо.
Вы можете увидеть такое же уродливое поведение, запустив Office 2003 и попробовав просмотреть дочерние окна MDI (возможно, в Excel). Однако на самом деле в Office 2007 есть три цветовые темы: синяя, серебристая и черная. Эти темы каким-то образом переносятся в дочерние окна MDI в Excel.
Я не знаю, как Microsoft делает это в Office 2007. Я хотел бы узнать, как это сделать. Мне нужно подключить и взять на себя отрисовку моих дочерних окон MDI и воспроизвести то, что удалось сделать команде Office 2007. Проблема в том, что я хочу использовать все вызовы DrawTheme*, чтобы правильно отрисовывать градиенты, закругленные края и кнопки. И всем этим системным вызовам нужен дескриптор темы. Но кажется невозможным, например, использовать SetWindowTheme для перехода на использование цветовой схемы из другой темы. По крайней мере, насколько я могу судить.
Кто-нибудь знает, как Microsoft добилась этого?