自定义功能区颜色
Windows 功能区框架公开一组颜色属性,这些属性允许应用程序在运行时自定义各种功能区 UI 元素的外观。
简介
下表中列出的 框架属性键 用于设置功能区应用程序中各种 UI 元素的颜色。 这些属性允许功能区框架跨应用程序支持个性化、标识要求和品牌规范。
功能区颜色 | 框架属性键 |
---|---|
背景色 | UI_PKEY_GlobalBackgroundColor |
仅在 Windows 7) (突出显示颜色 |
** UI_PKEY_GlobalHighlightColorWindows 8 中引入: ** UI_PKEY_GlobalHighlightColor不能独立于UI_PKEY_GlobalBackgroundColor设置。 |
文本颜色 |
Windows 8中引入的UI_PKEY_GlobalTextColor:对 Windows 8 中UI_PKEY_GlobalBackgroundColor默认值的更改可能需要调整,以在专为 Windows 7 设计的功能区应用中UI_PKEY_GlobalTextColor。 |
指定功能区颜色
功能区框架使用色调、饱和度、亮度 (HSB) 颜色模型,该模型不同于更常见的色调、饱和度、亮度 (HSL) 或色调、饱和度、值 (HSV) 颜色空间。 具体而言,B 表示总体亮度或亮度级别,而不是特定颜色的亮度。
若要在功能区框架中指定 UI 元素的颜色,应用程序会将 HSB 值分配给每个全局颜色属性。 然后,这些值会根据功能区应用程序的要求在所有功能区元素上普遍应用, (框架不支持将 HSB 值分配给单个元素和控件) 。
** 在 Windows 8 中引入: **为 UI_PKEY_GlobalHighlightColor 分配与 UI_PKEY_GlobalBackgroundColor 相同的值。
下表介绍了功能区框架 HSB 参数。
组件
说明
调整后的值*
Hue (H)
颜色(或实际颜色)通常被标识为介于 0 到 359 度之间的值。
0 (红色) 到 255 (红色)
饱和度 (S)
以 0 到 100% 的百分比度量的颜色的纯度或饱和度。
0 (灰色) 到 255 (完全饱和)
亮度 (B)
以 0 到 100% 的百分比度量的颜色的总体亮度或深色。
0 (深色) 到 255 (光)
* 每个参数值的原始范围将转换为框架的 0 到 255 范围。
HSB 值不标识特定颜色。 相反,HSB 属性值的组合会影响如何在整个 UI 中相对于彼此调整颜色渐变。
将自定义 HSB 值分配给 UI_PKEY_GlobalTextColor 和 UI_PKEY_GlobalBackgroundColor时,建议这些值具有足够高的对比度,以确保可读性。 具体而言,文本颜色应比功能区 UI 最浅的阴影深。 如有必要,框架会自动调整UI_PKEY_GlobalTextColor HSB 值,以针对派生自UI_PKEY_GlobalBackgroundColor的任何背景阴影或渐变提供足够的对比度。
注意
在 Windows 7 中,可以独立于 UI_PKEY_GlobalBackgroundColor 设置 UI_PKEY_GlobalHighlightColor。
以下示例演示如何为 UI_PKEY_GlobalTextColor、 UI_PKEY_GlobalBackgroundColor和 UI_PKEY_GlobalHighlightColor 属性指定自定义颜色。
CComPtr<IPropertyStore> spPropertyStore;
// _spFramework is a pointer to the IUIFramework interface that is assigned
// when the Ribbon is initialized.
if (SUCCEEDED(_spFramework->QueryInterface(&spPropertyStore)))
{
PROPVARIANT propvarBackground;
PROPVARIANT propvarHighlight;
PROPVARIANT propvarText;
// UI_HSBCOLOR is a type defined in UIRibbon.h that is composed of
// three component values: hue, saturation and brightness, respectively.
UI_HSBCOLOR BackgroundColor = UI_HSB(0x14, 0x38, 0x54);
UI_HSBCOLOR HighlightColor = UI_HSB(0x00, 0x36, 0x87);
UI_HSBCOLOR TextColor = UI_HSB(0x2B, 0xD6, 0x00);
InitPropVariantFromUInt32(BackgroundColor, &propvarBackground);
InitPropVariantFromUInt32(HighlightColor, &propvarHighlight);
InitPropVariantFromUInt32(TextColor, &propvarText);
spPropertyStore->SetValue(UI_PKEY_GlobalBackgroundColor, propvarBackground);
spPropertyStore->SetValue(UI_PKEY_GlobalTextColor, propvarText);
spPropertyStore->Commit();
}
将 RGB 转换为 HSB
本部分介绍在运行时将功能区框架 HSB 值(本示例中 UI_PKEY_GlobalBackgroundColor )动态匹配到特定 RGB 颜色所需的公式。
选项卡行背景用作参考点,因为与功能区背景的亮度渐变相比,选项卡行背景呈现为平面颜色表面。
若要获取中间 HSL 值,需要进行初步转换。 然后,可以将此 HSL 值转换为 HSB 值。
注意
使用大多数照片编辑软件可以轻松实现从 RGB 到 HSL 的转换。
将 HSL (与 0.0 到 1.0 范围内的每个组件) 转换为功能区 HSB 设置是通过以下公式完成的:
- H背景 = 圆形 (255.0 H)
- S背景 = 圆形 (255.0 S)
- B背景 = 圆 (257.7 + 149.9 ln (L) ) (如果 0.1793 <= L <= 0.9821)