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

我试图检索任务栏和/或我的应用程序主窗口的背景和文本颜色。 事实certificate,Windows 7不会返回正确的颜色。 如果我ie切换到粉红色的主题,Windows 7仍然返回窗口标题,尽pipe这不是真的。 这发生在使用

GetSysColor(COLOR_ACTIVECAPTION); 

以及使用HTHEME hTheme = OpenThemeData(hwnd,L“WINDOW”);

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

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

物业标识符和零件和国家

但是这几百个参数的大部分组合都是无效的。 有什么清单和/或描述哪些组合可以使用?

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

返回“找不到元素”。

Solutions Collecting From Web of "是否有GetThemeColor / Visual Styles API的有效参数组合列表"

根据我对XP主题的了解,一个.msstyles文件只是包含图像和属性(颜色,大小,字体等)的部分定义的集合,所有这些都是任意定义的。 UxTheme API只是返回这个文件中的任何东西,并且一定组合的属性的存在取决于主题作者,基本上(这就是为什么如果主题API失败,你应该总是回退到“经典的” GetSysColorGetSystemMetricsSystemParametersInfo返回你正在寻找的任何东西。

不过,你在这里提到一个“粉红色的主题”,所以我假设你是在说一个航空玻璃的主题。 Aero主题颜色由DWM处理,并且与经典或UxTheme API颜色分离。 为了检索Aero窗口颜色,必须使用DwmGetColorizationColor ,它将以0xAARRGGBB格式返回(相对于COLORREF是0x00BBGGRR,因此您需要在两种格式之间进行转换)。 为了首先查找是否启用了DWM组合(又名“Aero Glass”),您必须调用DwmIsCompositionEnabled

理解这个最简单的方法是:实体标题栏IS的颜色仍然是浅蓝色。

然而,当启用aero时,标题栏文本会以完全透明的背景进行呈现,因此(大部分情况下)DWM正在使用该颜色。

属性常量(即主题函数接受的iPartId参数)只提供了一组主题定义可能 (不必)为各种类/部件/样式组合定义的集合。

也就是说,您的代码必须准备好以备用方式确定的颜色。

查看XP(Luna)或Vista / 7(Aero)定义的标准主题通常很有用。 为此,你可以使用一些这样做,例如ThemeExplorer: http : //sourceforge.net/projects/mctrl/files/theme-explorer/