Есть ли список допустимых комбинаций параметров для API GetThemeColor / Visual Styles
Я пытаюсь получить фон и цвет текста на панели задач и / или в главном окне моих приложений. Оказалось, что Windows 7 не возвращает правильные цвета. Если я переключаюсь на розовую тему, Windows 7 по-прежнему возвращает светло-голубой заголовок окна, хотя это не так. Это происходит с помощью
GetSysColor(COLOR_ACTIVECAPTION);
а также с использованием HTHEME hTheme = OpenThemeData(hwnd, L"WINDOW");
HRESULT result = GetThemeColor(
hTheme,
WP_CAPTION,
CS_ACTIVE,
TMT_FILLCOLORHINT,
&color);
Кроме того, я пробую различные комбинации параметров, чтобы узнать цвет текста заголовка. Я знаю страницы Microsoft
Идентификаторы собственности и части и государства
но большинство комбинаций этих сотен параметров недопустимы. Есть ли список и / или описание, какие комбинации можно использовать?
Т.е.
GetThemeColor(
hTheme,
WP_CAPTION, // BP_PUSHBUTTON,
CS_ACTIVE,
TMT_CAPTIONTEXT,
&color);
возвращает "Элемент не найден".
3 ответа
Насколько мне известно о темах XP, файл.msstyles - это просто набор определений частей, которые имеют изображения и свойства (цвета, размеры, шрифты и т. Д.), Которые определены произвольно. UxTheme API просто возвращает все, что находится в этом файле, и наличие определенной комбинации свойств зависит, в основном, от автора темы (именно поэтому вы всегда должны возвращаться к "классическому"). GetSysColor
, GetSystemMetrics
или же SystemParametersInfo
если API темы не может вернуть то, что вы ищете.
Тем не менее, вы упомянули "розовую тему" здесь, поэтому я предполагаю, что вы говорите о теме Aero Glass. Цвета Aero-темы обрабатываются DWM и не зависят от классического или UxTheme API-цвета. Чтобы получить цвет окна Aero, вы должны использовать DwmGetColorizationColor
, который вернет его в формате 0xAARRGGBB (в отличие от COLORREF
это 0x00BBGGRR, поэтому вам нужно будет переводить между двумя форматами). Чтобы сначала узнать, включена ли композиция DWM (она же "Aero Glass"), необходимо позвонить DwmIsCompositionEnabled
,
Простейший способ понять это: цвет сплошных заголовков по-прежнему светло-синий.
Однако, когда включена функция аэро, текст заголовка отображается с полностью прозрачным фоном и, таким образом, имеет (в основном) любой цвет, которым DWM окрашивает кадр.
Константы свойств (то есть то, что функции темы принимают в качестве параметра iPartId) просто предоставляют набор того, что определения темы могут (не должны) определять для различных комбинаций классов / частей / стилей.
Т.е. ваш код должен быть готов к возврату к цвету, определенному другим способом.
Часто полезно посмотреть, что определяют стандартные темы в XP (Luna) или Vista/7 (Aero). Для этого вы можете использовать некоторые из них, например, ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/