是否有 GetThemeColor / Visual Styles API 的有效参数组合列表
Posted
技术标签:
【中文标题】是否有 GetThemeColor / Visual Styles API 的有效参数组合列表【英文标题】:Is there a list of valid parameter combinations for GetThemeColor / Visual Styles API 【发布时间】:2010-12-25 16:37:29 【问题描述】:我正在尝试检索任务栏和/或我的应用程序主窗口的背景和文本颜色。事实证明,Windows 7 没有返回正确的颜色。如果即切换到粉红色主题,Windows 7 仍会为窗口标题返回浅蓝色,尽管事实并非如此。这发生在使用
GetSysColor(COLOR_ACTIVECAPTION);
以及使用 HTHEME hTheme = OpenThemeData(hwnd, L"WINDOW");
HRESULT result = GetThemeColor(
hTheme,
WP_CAPTION,
CS_ACTIVE,
TMT_FILLCOLORHINT,
&color);
此外,我发现自己尝试了各种参数组合来找出标题文本的颜色。我知道微软页面
Property Identifiers 和 Parts and States
但是这数百个参数的大多数组合都是无效的。是否有可以使用哪些组合的列表和/或说明?
即
GetThemeColor(
hTheme,
WP_CAPTION, // BP_PUSHBUTTON,
CS_ACTIVE,
TMT_CAPTIONTEXT,
&color);
返回“未找到元素”。
【问题讨论】:
【参考方案1】:根据我对 XP 主题的了解,.msstyles 文件只是具有任意定义的图像和属性(颜色、大小、字体等)的部件定义的集合。 UxTheme API 只返回此文件中的任何内容,并且特定属性组合的存在取决于主题作者,基本上(这就是为什么您应该始终回退到“经典”GetSysColor
、GetSystemMetrics
或 @987654323 @ 如果主题 API 无法返回您要查找的内容。
但是,您在这里提到了“粉色主题”,所以我假设您说的是 Aero Glass 主题。 Aero 主题颜色由 DWM 处理,并且与经典或 UxTheme API 颜色分开。为了检索 Aero 窗口颜色,您必须使用 DwmGetColorizationColor
,它将以 0xAARRGGBB 格式返回(而不是 COLORREF
,即 0x00BBGGRR,因此您需要在两种格式之间进行转换)。为了首先确定是否启用了 DWM 合成(又名“Aero Glass”),您必须调用 DwmIsCompositionEnabled
。
【讨论】:
【参考方案2】:理解这一点的最简单方法是:实心标题栏的颜色仍然是浅蓝色。
但是,当启用 aero 时,标题栏文本以完全透明的背景呈现,因此(大部分)是 DWM 为框架着色的任何颜色。
【讨论】:
【参考方案3】:属性常量(即主题函数接受什么作为 iPartId 参数)只是提供了一组主题定义可能(不是必须)为各种类/部件/样式组合定义的内容。
即您的代码必须准备好回退到以其他方式确定的颜色。
查看 XP (Luna) 或 Vista/7 (Aero) 上的标准主题定义通常很有用。为此,您可以使用一些这样做,例如主题浏览器: http://sourceforge.net/projects/mctrl/files/theme-explorer/
【讨论】:
以上是关于是否有 GetThemeColor / Visual Styles API 的有效参数组合列表的主要内容,如果未能解决你的问题,请参考以下文章
win10 64位 python3.6 django1.11 MysqlDB No module named 'MySQLdb' 安装MysqlDB报错 Microsoft Visua