我正在尝试检索任务栏和/或我的应用程序主窗口的背景和文本颜色。原来,Windows 7没有返回正确的颜色。如果我切换到粉红色主题,Windows 7仍然会返回浅蓝色的窗口标题,虽然这不是真的。这是使用
发生的GetSysColor(COLOR_ACTIVECAPTION);
以及使用 HTHEME hTheme = OpenThemeData(hwnd,L“WINDOW”);
HRESULT result = GetThemeColor(
hTheme,
WP_CAPTION,
CS_ACTIVE,
TMT_FILLCOLORHINT,
&color);
此外,我发现自己尝试各种参数组合来找出标题文本的颜色。我知道microsofts页面
Property Identifiers和Parts and States
但这些数百个参数的大多数组合都是无效的。是否有任何列表和/或描述可以使用哪些组合?
即。
GetThemeColor(
hTheme,
WP_CAPTION, // BP_PUSHBUTTON,
CS_ACTIVE,
TMT_CAPTIONTEXT,
&color);
返回“找不到元素”。
答案 0 :(得分:9)
根据我对XP主题的了解,.msstyles文件只是具有图像和属性(颜色,大小,字体等)的零件定义的集合,所有这些都是任意定义的。 UxTheme API只返回此文件中的任何内容,并且某些属性组合的存在取决于主题作者,基本上(这就是为什么你应该总是回到“经典”GetSysColor
,{{1} }或GetSystemMetrics
如果主题API无法返回您要查找的内容。
但是,你在这里提到了一个“粉红色主题”,所以我假设你说的是Aero Glass主题。 Aero主题颜色由DWM处理,但与经典或UxTheme API颜色分开。要检索Aero窗口颜色,必须使用SystemParametersInfo
,它将以0xAARRGGBB格式返回(而不是DwmGetColorizationColor
,即0x00BBGGRR,因此您需要在两种格式之间进行转换) 。为了首先查找是否启用了DWM组合(又名“Aero Glass”),您必须调用COLORREF
。
答案 1 :(得分:0)
理解这一点的最简单方法是:实心标题栏的颜色仍为浅蓝色。
然而,当启用aero时,标题栏文本将以完全透明的背景呈现,因此(大多数情况下)是DWM对帧进行着色的任何颜色。
答案 2 :(得分:0)
属性常量(即主题函数接受的iPartId参数)只提供了一组主题定义可能(不必)为各种类/部件/样式组合定义的内容。
即。您的代码必须准备好回退到以其他方式确定的颜色。
查看XP(Luna)或Vista / 7(Aero)上的标准主题定义通常很有用。为此你可以使用一些,例如ThemeExplorer: http://sourceforge.net/projects/mctrl/files/theme-explorer/