Поддержка тем высокой контрастности

В этом разделе сравнивается поддержка тем высокой контрастности в Windows 8 с предыдущими версиями Windows и объясняется, как поддерживать темы высокой контрастности в приложении Windows 8.

Он содержит следующие разделы.

Обзор поддержки тем высокой контрастности

Windows 7 и более ранних версий поддерживают две тематические модели, включая устаревшую классическую модель Windows и текущие визуальные стили. Классическая модель Windows была сохранена в Windows 7 в основном для поддержки различных тем высокой контрастности. Однако классическая модель Windows имеет ряд недостатков:

  • Нет поддержки тем, использующих визуальные стили, например Windows Aero. Пользователи тем высокой контрастности должны использовать классический пользовательский интерфейс Windows.
  • Поддержка функций пользовательского интерфейса, использующих диспетчер окон рабочего стола (DWM), не поддерживается, например предварительные просмотры эскизов и полноэкранный экранный экран, представленный в Windows 7.
  • Разработчики должны поддерживать два отдельных пути кода для поддержки двух разных темных моделей.

В Windows 8 и более поздних версиях следующие изменения в модели их создания устраняют предыдущие недостатки:

  • Классическая модель тем windows больше не поддерживается, что позволяет разработчикам поддерживать только один путь кода для приложений, предназначенных только для Windows 8.
  • Так как визуальные стили и DWM находятся в Windows 8, пользователи с высокой контрастностью имеют доступ к таким функциям, как предварительные просмотры эскизов и полноэкранный луп.
  • Визуальные стили поддерживают настройку цветов различных элементов пользовательского интерфейса, что позволяет пользователям с высокой контрастностью настраивать пользовательский интерфейс в соответствии с отдельными потребностями и предпочтениями.
  • Windows 8 включает поддержку совместимости существующих приложений, предназначенных для использования тем высокой контрастности на основе классической модели тематических тем Windows.

Поддержка тем высокой контрастности в Windows 8 и более поздних версиях

В Windows 8, так как стили визуальных элементов находятся в режиме высокой контрастности, поддержка тем высокой контрастности проста, если вы захаживале следующие рекомендации.

  • Размеры шрифтов и элементов управления. Чтобы пользовательский интерфейс был доступен пользователям с ограниченными возможностями, задайте размеры шрифтов в соответствии с текущими параметрами темы. Задайте размер элементов управления по крайней мере по умолчанию.
  • Цвета. Избегайте использования жестко закодированных цветов. Вместо этого используйте системные цвета, так как они основаны на текущей теме. Использование пользовательских цветов может мешать и переопределять цвета в темах высокой контрастности.
  • Манифест приложения. Приложения, предназначенные для работы с новыми темами высокой контрастности, должны иметь раздел совместимости приложений, определенный в манифесте, который содержит идентификаторы GUID совместимости Windows 8. В противном случае Windows предполагает, что приложение предназначено для более старой версии Windows и отрисовывает пользовательский интерфейс приложения, имитируя классическую модель темов Windows.

Добавление раздела совместимости в манифест приложения

Манифест приложения — это XML-файл, описывающий требования для приложения. Раздел совместимости манифеста определяет версии Windows, поддерживаемые приложением. Следующие идентификаторы GUID используются в разделе совместимости для идентификации различных версий Windows.

Версия GUID
Windows Vista {e2011457-1546-43c5-a5fe-008deee3d3f0}
Windows 7 {35138b9a-5d96-4fbd-8e2d-a24025f93a}
Windows 8 {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

 

Раздел совместимости может указывать несколько версий Windows, но каждый из них должен содержаться в собственном <supportedOS/> теге. В следующем примере показан манифест приложения, указывающий Windows 7 и Windows 8 в разделе совместимости:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!--The ID below indicates application support for Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>

            <!--The ID below indicates application support for Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        </application>
    </compatibility>
</assembly>

Если у приложения нет манифеста совместимости, предполагается, что оно является приложением Windows Vista и не использует тематические элементы управления в клиентской области при активной теме высокой контрастности. Кроме того, влияет поведение некоторых функций визуальных стилей. Например, IsThemeActive, IsCompositionActive и IsAppThemed возвращают FALSE, а OpenThemeData и OpenThemeDataEx возвращают дескриптор NULL. Это предназначено для поддержки совместимости, чтобы приложения, созданные до Windows 8, по-прежнему могли отображать свой пользовательский интерфейс в том же режиме, что и режим высокой контрастности предыдущих версий Windows, где визуальные стили недоступны.

В Windows 8 приложение по-прежнему получает преимущества композиции настольных компьютеров. Это означает, например, что приложения удобства использования, такие как полноэкранный экран, не зависят от состояния манифеста отдельного приложения. Приложение с удобством использования продолжает работать в режиме высокой контрастности с приложением, которое не идентифицирует себя как совместимое с Windows 8 в своем манифесте.

На следующих изображениях показан простое диалоговое окно с высокой контрастностью в Windows 7.

hig contrast dialog box

На этом рисунке показан тот же диалог с высокой контрастностью в Windows 8, но с совместимостью Windows 7, указанной в манифесте приложения:

w8 high contrast dialog box

На этом рисунке показано то же диалоговое окно с высокой контрастностью в Windows 8 с Windows 8, указанным в манифесте приложения:

w8 high contrast dialog with manifest

Обнаружение высокой контрастности в предыдущих версиях Windows

Приложения, работающие в предыдущих версиях Windows, не имеют доступа к новым темам высокой контрастности. Если приложение должно работать в предыдущих версиях, следует включить поддержку отрисовки пользовательского интерфейса в высокой контрастности в классической модели тем windows. Приложение может определить, активна ли тема высокой контрастности, вызвав функцию SystemParametersInfo с флагом SPI_GETHIGHCONTRAST.

Включение визуальных стилей

Стили визуальных элементов