2009-12-11 108 views
5

我试图检索任务栏和/或我的应用程序主窗口的背景和文本颜色有效的参数组合的列表。事实证明,Windows 7不会返回正确的颜色。如果我即切换到粉红色的主题,Windows 7仍然返回窗口标题的浅蓝色,虽然那不是真的。发生这种情况使用是否有GetThemeColor /视觉样式API

GetSysColor(COLOR_ACTIVECAPTION); 

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

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

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

Property IdentifiersParts and States

但这些上百个参数的组合大部分是无效的。是否有任何列表和/或描述可以使用哪种组合?

I.e.

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

返回“找不到元素”。

回答

8

根据我的XP主题的知识,一个.msstyles文件只是一个具有图像和性质(颜色,大小,字体等),所有的任意定义部分定义集合。该的Uxtheme API只返回无论是在这个文件,和属性的特定组合的存在依赖于主题的作者,基本上(这就是为什么你应该总是退回到“经典” GetSysColorGetSystemMetricsSystemParametersInfo如果主题API失败返回你正在寻找的任何东西

然而,你在这里提到了一个“粉红色的主题”,所以我假设你是在说Aero Glass主题.Aero主题颜色是由DWM处理的,并且与经典或的Uxtheme API颜色。为了找回Aero的窗口颜色,您必须使用DwmGetColorizationColor,这将在0xAARRGGBB格式返回它(而不是一个COLORREF是0x00BBGGRR,所以你需要将两种格式之间进行转换)。为了首先找到是否启用DWM组合(又名“Aero Glass”) d,您必须致电DwmIsCompositionEnabled

+0

非常有价值的信息。谢谢。 – 2009-12-12 12:44:29

0

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

当Aero是启用然而,标题栏文本呈现一个完全透明的背景,因此是(大部分)任何颜色的DWM被着色与框架。

0

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

I.e.您的代码必须准备好备用,以备用其他方式确定的颜色。

常常是有用的,看看有什么在XP(月神)或Vista标准主题/ 7(航空)定义。为此,您可以使用一些功能,例如ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/