高对比度模式

平台

客户端 - Windows 8 服务器 - Windows Server 2012

说明

在以前的 Windows 操作系统中,高对比度模式仅限于在经典主题下运行的主题,这些主题没有视觉样式。 在Windows 8和Windows Server 2012中,经典模式已被删除,并替换为视觉样式高对比度主题。 此更改的主要好处之一是删除在经典模式下运行的应用的单独代码路径。

开发人员仍需要接受教育,了解高对比度模式如何影响其应用,以及如何开发真正与风格无关的应用。 这一点很重要,因为虽然主题颜色的使用不正确或假设可能导致应用在视觉样式(如 Aero)下行为正确,但这些应用在高对比度下响应不正确。 例如,在 Aero 中,文本始终为黑色,突出显示颜色为浅蓝色。 但是,在高对比度黑色中,突出显示颜色为黑色。 如果你假设有黑色文本,就像在Windows 8之前的许多内置应用中一样,并使用系统默认值突出显示,用户将在黑色背景上看到黑色文本。 在这些情况下,有必要了解如何正确使用主题和系统指标,以便应用在样式上看起来正确。

表现

  • 在应用清单中不包含 Windows 8 <supportedOS> 标记的应用的工作区中未启用主题设置。 因此,应用必须使用在经典主题的高对比度模式下呈现所需的代码路径来呈现工作区。
  • 在高对比度主题的应用的非客户端和客户端区域中均未启用主题主题。 它还未在其应用清单中包含 Windows 8 <supportedOS> 标记且使用 DwnIsCompositionEnabled () API 在窗口的非工作区中启用。 整个应用以经典主题的高对比度模式呈现。
  • 在其清单中添加对Windows 8的支持的应用,但不使用视觉样式进行呈现,也就是说,它们在应用中的硬编码颜色或图像可能无法在高对比度主题中正确呈现。 文本可能难以阅读,否则图像可能不会显示为高对比度模式。

缓解措施

高对比度主题中的文本颜色已创作为符合 Microsoft 辅助功能指南。 我们在前台和背景之间保持 14:1 高对比度。 如果默认启用的颜色不适合特定最终用户,则可以通过这些高对比度主题中“窗口颜色”的控制面板设置轻松自定义这些颜色。

这些 UI 组件在高对比度主题中可自定义:

  • 窗口背景色
  • 文本颜色
  • 超链接颜色
  • 禁用的文本
  • 所选文本前景和背景色
  • 活动窗口标题前景和背景色
  • 非活动窗口标题前景和背景色
  • 按钮前景和背景色

解决方案

如果在高对比度主题的应用中看到意外行为,则以下解决方案之一可能会有所帮助:

  • 为Windows 8显示应用:

    应用清单中不包含 Windows 8 <supportedOS> 标记的应用将呈现其客户端区域,而无需主题。 现装应用应在应用清单中包含此条目。 为 Windows 8添加 4a2f28e3-53b9-4441-ba9c-d69d4a6e38 GUID 值。

  • 将视觉样式与所有者绘制的 UI 配合使用:

    所有者绘制的控件应按照 MSDN 上的说明正确呈现控件部件和状态,包括文本。 开发人员不应依赖设备上下文中指定的文本或背景色,才能使用非 UxTheme 方法进行呈现。 如果控件没有主题部分,请使用具有 相应指标 的 GetThemeSysColor,并使用标准 GDI 方法绘制文本。 如果任何 UxTheme 调用都不适用,请使用 GetSysColor 方法获取相应的指标。

  • 选择文本颜色:

    不要使用硬编码的文本颜色,即使假定在所有常见方案中看起来正常。 发货主题是采用一种支持高可见性的关联指标的方式创建的。 例如,COLOR_HIGHLIGHTTEXT旨在将COLOR_HIGHLIGHT用作背景,COLOR_WINDOWTEXT旨在与COLOR_WINDOW作为背景一起使用。 如果这些关联存在例外情况,请在主题部件和状态定义本身而不是代码中使用它们。 设计高对比度 UI 时,UI 与当前应用的高对比度主题无关至关重要,因为高对比度用户可以自定义其颜色。

  • 响应WM_ThemeChange事件:

    如果应用缓存从主题检索的颜色或以非标准方式应用颜色,请为重新计算存储的颜色值并重新绘制 UI 的WM_THEMECHANGE添加消息处理程序。

  • 编写高对比度 WWA 应用:

    Web 应用无权访问 UxTheme API,但仍应使用当前系统指标编写为 UI 的基础。 WWA 开发人员可以使用一些资源来确保高对比度兼容应用:

    • W3C CSS 颜色规范指定使用系统指标而不是特定颜色的语法
    • 正在将高对比度媒体查询的支持添加到 Internet Explorer 10
    • WWA 可以利用 IAccessibilityCapabilities::get_HighContrast () 方法检查高对比度的状态

    Windows 应用商店应用与经典 Windows 应用程序中存在的主题部件没有许多相同的问题,但仍需要确保高对比度符合性。 默认情况下,Internet Explorer 会忽略某些用户定义的样式,并将其替换为高对比度兼容值。 例如,忽略背景图像、背景和颜色 CSS 属性。

    如果不希望 Internet Explorer 忽略设置的任何属性,并且已确保 UI 符合高对比度,则可以在父元素上设置新的 M3 CSS 属性 -ms-high-contrast:off。

  • 编写高对比度 Windows 应用商店应用:

    Windows 应用商店应用应使用 SystemColors 类来确定适当的 UI 元素着色,请记住,某些系统指标颜色旨在结合使用,如 SystemColors.WindowColor 和 SystemColors.WindowTextColor。 这有助于获得卓越的高对比度体验。

  • 正确检测早期版本的 Windows 中的高对比度:

    即使清单指定与有问题的 Windows 版本兼容,在早期版本的 Windows 上运行的应用也无法访问新的高对比度主题。 因此,可能需要插入其他代码路径来处理在早期版本的 Windows 中使用的经典环境中呈现。 在这种情况下,应通过调用具有SPI_GETHIGHCONTRAST标志的 SystemParametersInfo 函数来检查高对比度的存在。 这是检查高对比度状态的唯一支持方法。

测试

测试应用时,请确保它在Windows 8提供的所有内置主题中正确呈现:航空、基本、高对比度 1、高对比度 2、高对比度黑色和高对比度白色。 请确保文本在高对比度主题中清晰可见且易于阅读。

资源