Есть ли список допустимых комбинаций параметров для 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/

Другие вопросы по тегам