Я унаследовал большое приложение MFC, которое содержит подкласс CComboBox
, который переопределяет OnPaint
. В настоящее время он рисует все вручную (с помощью линий и прямоугольников) и отображает поле со списком, которое явно выглядит в стиле Windows 98. Однако в остальном он отлично работает и предоставляет множество полезных настраиваемых функций, на которые мы полагаемся, и переписывание всего элемента управления, вероятно, не вариант.
Я хотел бы модернизировать его, чтобы OnPaint
рисовал в стиле Aero там, где это возможно (возврат к старому коду, когда современные темы недоступны). Я сделал это с некоторыми другими настраиваемыми элементами управления, которые у нас есть, например с кнопками, и это отлично подходит для наших целей. Я знаю, что есть некоторые крохотные особенности, с которыми он не справится, например, мягкие блики при наведении курсора мыши, но это не имеет большого значения для этого приложения.
У меня есть доступ к CVisualStylesXP
ckass, так что у меня уже есть инфраструктура, позволяющая легко выполнять такие вызовы, как OpenThemeData
, GetThemeColor
или DrawThemeBackground
(через LoadLibrary
, поэтому мы не используем Vista как min-систему). К сожалению, я не знаю правильной последовательности вызовов для получения красивого поля со списком с соответствующей теме рамкой и кнопкой раскрывающегося списка.
Кто-нибудь знает, что здесь делать?