我试图检索任务栏和/或我的应用程序主窗口的背景和文本颜色.原来,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,// BP_PUSHBUTTON,TMT_CAPTIONTEXT,&color);
返回“未找到元素”.
解决方法
根据我对XP主题的了解,.msstyles文件只是具有图像和属性(颜色,大小,字体等)的零件定义的集合,所有这些都是任意定义的. UxTheme API只返回此文件中的任何内容,并且某些属性组合的存在基本上取决于主题作者(这就是为什么如果主题API失败,您应该总是回到“经典”GetSysColor,GetSystemMetrics或SystemParametersInfo回报你想要的东西.
但是,你在这里提到了一个“粉红色主题”,所以我假设你说的是Aero Glass主题. Aero主题颜色由DWM处理,但与经典或UxTheme API颜色分开.要检索Aero窗口颜色,必须使用DwmGetColorizationColor,它将以0xAARRGGBB格式返回它(而不是COLORREF,即0x00BBGGRR,因此您需要在两种格式之间进行转换).为了首先查找是否启用了DWM组合(也称为“Aero Glass”),您必须调用DwmIsCompositionEnabled.