Есть ли список допустимых комбинаций параметров для GetThemeColor / Visual Styles API?

Я пытаюсь получить цвет фона и текста панели задач и / или главного окна моих приложений. Оказалось, что Windows 7 не возвращает правильные цвета. Если я переключаюсь на розовую тему, Windows 7 по-прежнему возвращает голубой цвет для заголовка окна, хотя это не так. Это происходит с использованием

GetSysColor(COLOR_ACTIVECAPTION); 

а также с использованием HTHEME hTheme = OpenThemeData (hwnd, L "WINDOW");

HRESULT result = GetThemeColor(      
                hTheme,
                WP_CAPTION, 
                CS_ACTIVE, 
                TMT_FILLCOLORHINT, 
                &color);

Более того, я пробую различные комбинации параметров, чтобы узнать цвет текста подписи. Я знаю страницы микрософтов

Идентификаторы свойств и Части и состояния

но большинство комбинаций этих сотен параметров недопустимы. Есть ли список и / или описание, какие комбинации можно использовать?

I.e.

 GetThemeColor(      
                    hTheme,
                    WP_CAPTION, // BP_PUSHBUTTON,
                    CS_ACTIVE, 
                    TMT_CAPTIONTEXT,
                    &color);

возвращает «Элемент не найден».


person RED SOFT ADAIR    schedule 11.12.2009    source источник


Ответы (3)


Насколько я знаю темы XP, файл .msstyles - это просто набор определений частей, которые имеют изображения и свойства (цвета, размеры, шрифты и т. Д.), Все они определены произвольно. API UxTheme просто возвращает все, что находится в этом файле, а наличие определенной комбинации свойств в основном зависит от автора темы (вот почему вы всегда должны возвращаться к «классическим» GetSysColor, GetSystemMetrics или SystemParametersInfo, если API темы не работает. чтобы вернуть то, что вы ищете.

Однако вы упоминаете здесь «розовую тему», поэтому я предполагаю, что вы говорите о теме Aero Glass. Цвета темы Aero обрабатываются DWM и при этом отделены от классических цветов или цветов UxTheme API. Чтобы получить цвет окна Aero, вы должны использовать DwmGetColorizationColor, который вернет его в формате 0xAARRGGBB (в отличие от COLORREF, который равен 0x00BBGGRR, поэтому вам нужно будет выполнить перевод между двумя форматами). Чтобы сначала узнать, включена ли композиция DWM (также известная как «Aero Glass»), вы должны вызвать DwmIsCompositionEnabled.

person Koro    schedule 11.12.2009

Самый простой способ понять это: цвет сплошных строк заголовка по-прежнему голубой.

Однако, когда включен режим aero, текст заголовка отображается с полностью прозрачным фоном и, следовательно, (в основном) является тем цветом, которым DWM окрашивает фрейм.

person Chris Becke    schedule 11.12.2009

Константы свойств (то есть то, что функции тематики принимают в качестве параметра iPartId) просто предоставляют набор того, что определения тем могут (не должны) определять для различных комбинаций классов / частей / стилей.

Т.е. ваш код должен быть готов к переходу на другой цвет, определенный другим способом.

Часто бывает полезно посмотреть, что определяют стандартные темы XP (Luna) или Vista / 7 (Aero). Для этого вы можете использовать что-нибудь, например ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/

person mity    schedule 13.06.2012