是否有GetThemeColor/Visual Styles API的有效参数组合列表

是否有GetThemeColor/Visual Styles API的有效参数组合列表,c,windows,winapi,windows-7,windows-themes,C,Windows,Winapi,Windows 7,Windows Themes,我正在尝试检索任务栏和/或我的应用程序主窗口的背景和文本颜色。事实证明,Windows7没有返回正确的颜色。如果切换到粉色主题,Windows7仍然会返回浅蓝色的窗口标题,尽管事实并非如此。这是通过使用 GetSysColor(COLOR_ACTIVECAPTION); 以及使用 HTHEME HTHEME=开放主题数据(hwnd,L“窗口”) 此外,我发现自己正在尝试各种参数组合,以找出标题文本的颜色。我知道微软的网页 及 但这数百个参数的大多数组合都是无效的。是否有可使用的组合的列表和/

我正在尝试检索任务栏和/或我的应用程序主窗口的背景和文本颜色。事实证明,Windows7没有返回正确的颜色。如果切换到粉色主题,Windows7仍然会返回浅蓝色的窗口标题,尽管事实并非如此。这是通过使用

GetSysColor(COLOR_ACTIVECAPTION); 
以及使用 HTHEME HTHEME=开放主题数据(hwnd,L“窗口”)

此外,我发现自己正在尝试各种参数组合,以找出标题文本的颜色。我知道微软的网页

但这数百个参数的大多数组合都是无效的。是否有可使用的组合的列表和/或说明


返回“未找到元素”

根据我对XP主题的了解,.msstyles文件只是包含图像和属性(颜色、大小、字体等)的零件定义的集合,所有这些都是任意定义的。UxTheme API只返回该文件中的任何内容,并且属性的某种组合的存在基本上取决于主题作者(这就是为什么您应该始终回到“经典”的原因)
GetSysColor
GetSystemMetrics
SystemParametersInfo
如果主题API无法返回您要查找的内容


但是,您在这里提到了一个“粉色主题”,因此我假设您指的是Aero Glass主题。Aero主题颜色由DWM处理,但与经典或UxTheme API颜色不同。为了检索Aero窗口颜色,必须使用
DwmGetColorizationColor
,它将以0xAARRGGBB格式返回(与
COLORREF
相反,它是0x00BBGGRR,因此您需要在两种格式之间进行转换)。为了首先找到是否启用了DWM合成(也称为“Aero Glass”),必须调用
DwmIsCompositionEnabled

理解这一点的最简单方法是:实心标题栏的颜色仍然是浅蓝色

但是,启用aero时,标题栏文本以完全透明的背景呈现,因此(主要)是DWM为帧着色的任何颜色。

属性常量(即主题化函数接受为iPartId参数的内容)仅提供主题定义可能提供的一组内容为各种类/零件/样式组合定义

也就是说,您的代码必须准备好返回到以其他方式确定的颜色

查看XP(Luna)或Vista/7(Aero)上定义的标准主题通常很有用。为此,您可以使用一些工具,例如ThemeExplorer:

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