自定义功能区颜色

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_GlobalTextColorUI_PKEY_GlobalBackgroundColor时,建议这些值具有足够高的对比度,以确保可读性。 具体而言,文本颜色应比功能区 UI 最浅的阴影深。 如有必要,框架会自动调整UI_PKEY_GlobalTextColor HSB 值,以针对派生自UI_PKEY_GlobalBackgroundColor的任何背景阴影或渐变提供足够的对比度。

注意

在 Windows 7 中,可以独立于 UI_PKEY_GlobalBackgroundColor 设置 UI_PKEY_GlobalHighlightColor

以下示例演示如何为 UI_PKEY_GlobalTextColorUI_PKEY_GlobalBackgroundColorUI_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)

颜色指南

框架属性