Поделиться через


Пошаговое руководство. Создание Windows-приложения с поддержкой специальных возможностей

Создание приложений со специальными возможностями необходимо по деловым соображениям. Во многих странах для продаваемого программного обеспечения существуют правительственные требования в отношении специальных возможностей. Использование эмблемы "Certified for Windows" (сертифицировано для Windows) предполагает соответствие продукта требованиям в отношении специальных возможностей. Согласно оценкам, только в США около 30 миллионов жителей с физическими ограничениями нуждаются в программном обеспечении со специальными возможностями. Многие из них — потенциальные клиенты.

В данном пошаговом руководстве демонстрируются пять требований в отношении специальных возможностей, выполнение которых необходимо для использования эмблемы "Certified for Windows". Согласно этим требованиям, в приложении со специальными возможностями обеспечиваются:

  • Поддержка с панели управления настроек размера, цвета, шрифта и параметров ввода. Размеры строки меню, строки заголовка, границ и строки состояния изменяются при изменении соответствующих параметров в панели управления. Дополнительные изменения элементов управления или кода в приложении не требуются.

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

  • Документированный доступ с клавиатуры ко всем возможностям.

  • Наглядное и программное представление фокуса клавиатуры.

  • Передача важной информации не только с помощью звукового сигнала.

Дополнительные сведения см. в разделе Ресурсы для создания приложений со специальными возможностями, на веб-странице программы "Certified for Windows" на узле MSDN Online (https://msdn.microsoft.com/certification/default.asp) и на веб-странице спецификаций разработки приложений для Windows XP (https://go.microsoft.com/fwlink/?LinkId=9775).

Дополнительные сведения о поддержке различных раскладок клавиатуры см. в разделе Рекомендации по разработке международных приложений.

Создание проекта

В данном пошаговом руководстве создается интерфейс пользователя для приложения, принимающего заказы на пиццу. Приложение содержит поле (TextBox) для имени заказчика, группу переключателей (RadioButton) для выбора размера пиццы, флажки (CheckedListBox) для выбора начинки, две кнопки с надписями "Заказать" и "Отмена", а также меню с командой "Выход".

Пользователь вводит имя заказчика, размер пиццы и требуемые начинки. Когда пользователь нажимает кнопку "Заказать", сводка заказа и его цена отображаются в окне сообщения, а элементы управления очищаются и становятся готовыми к приему следующего заказа. Когда пользователь нажимает кнопку "Отмена", элементы управления очищаются и становятся готовыми к приему следующего заказа. Когда пользователь выбирает в меню команду "Выход", программа закрывается.

Основное внимание в данном пошаговом руководстве уделяется не коду для системы розничной продажи, а специальным возможностям интерфейса пользователя. В примере демонстрируются средства специальных возможностей для некоторых часто используемых элементов управления, таких как кнопки, переключатели, поля и метки.

Чтобы начать разработку приложения

Добавление элементов управления в форму

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

  • Установите свойства AccessibleDescription и AccessibleName. В данном примере для свойства AccessibleRole достаточным является значение "Default". Дополнительные сведения о свойствах специальных возможностей см. в разделе Предоставление сведений о специальных возможностях для элементов управления формы Windows Forms.

  • Задайте размер шрифта 10 пунктов или выше.

    Примечание

    Если задать для формы размер шрифта 10 в начале работы, то все элементы управления, добавляемые в форму после этого, также будут иметь размер шрифта 10.

  • Убедитесь, что любой элемент "Label", относящийся к элементу "TextBox", непосредственно предшествует элементу "TextBox" в последовательности переходов.

  • Добавьте клавишу доступа с помощью знака & в значении свойства Text любого элемента управления, на который может перейти пользователь.

  • Добавьте клавишу доступа с помощью знака & в значение свойства Text метки, предшествующей элементу управления, на который может перейти пользователь. Задайте для свойства метки UseMnemonic значение true, чтобы при нажатии клавиши доступа фокус переводился на следующий элемент управления в последовательности переходов.

  • Добавьте клавиши доступа для всех пунктов меню.

Чтобы обеспечить специальные возможности приложения Windows

  • Добавьте в форму элементы управления и задайте их свойства, как описано ниже. Модель размещения элементов управления в форме см. на рисунке после таблицы.

    Объект

    Свойство

    Значение

    Form1

    AccessibleDescription

    Форма заказа

     

    AccessibleName

    Форма заказа

     

    Font Size

    10

     

    Текст

    Форма заказа пиццы

    PictureBox

    Имя

    эмблема

     

    AccessibleDescription

    Порция пиццы

     

    AccessibleName

    Эмблема компании

     

    Изображение

    Любой значок или рисунок

    Label

    Имя

    companyLabel

     

    Текст

    Вкусная пицца

     

    TabIndex

    1

     

    AccessibleDescription

    Название компании

     

    AccessibleName

    Название компании

     

    Backcolor

    Синий

     

    Forecolor

    Желтый

     

    Font size

    18

    Label

    Имя

    customerLabel

     

    Текст

    &Имя

     

    TabIndex

    2

     

    AccessibleDescription

    Подпись имени клиента

     

    AccessibleName

    Подпись имени клиента

     

    UseMnemonic

    True

    TextBox

    Имя

    customerName

     

    Текст

    (нет)

     

    TabIndex

    3

     

    AccessibleDescription

    Имя клиента

     

    AccessibleName

    Имя клиента

    GroupBox

    Имя

    sizeOptions

     

    AccessibleDescription

    Размеры порции пиццы

     

    AccessibleName

    Размеры порции пиццы

     

    Текст

    Размер пиццы

     

    TabIndex

    4

    RadioButton

    Имя

    smallPizza

     

    Текст

    &Маленькая 180 р.

     

    Установлен

    True

     

    TabIndex

    0

     

    AccessibleDescription

    Маленькая пицца

     

    AccessibleName

    Маленькая пицца

    RadioButton

    Имя

    largePizza

     

    Текст

    &Большая 300 р.

     

    TabIndex

    1

     

    AccessibleDescription

    Большая пицца

     

    AccessibleName

    Большая пицца

    Label

    Имя

    toppingsLabel

     

    Текст

    &Начинки (20 р. за каждую)

     

    TabIndex

    5

     

    AccessibleDescription

    Подпись начинок

     

    AccessibleName

    Подпись начинок

     

    UseMnemonic

    True

    CheckedListBox

    Имя

    начинки

     

    TabIndex

    6

     

    AccessibleDescription

    Выбор начинок

     

    AccessibleName

    Выбор начинок

     

    Items

    Пепперони, колбаса, грибы

    Кнопка

    Имя

    порядок

     

    Текст

    &Заказать

     

    TabIndex

    7

     

    AccessibleDescription

    Сумма заказа

     

    AccessibleName

    Сумма заказа

    Кнопка

    Имя

    отменить

     

    Текст

    &Отменить

     

    TabIndex

    8

     

    AccessibleDescription

    Отмена заказа

     

    AccessibleName

    Отмена заказа

    MainMenu

    Имя

    theMainMenu

    MenuItem

    Имя

    fileCommands

     

    Текст

    &Файл

    MenuItem

    Имя

    exitApp

     

    Текст

    В&ыход

    Форма будет иметь вид, аналогичный представленному ниже.

    Форма заказа пиццы

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

Режим высокой контрастности представляет собой тип системной настройки Windows, при которой удобство чтения текста повышается за счет более контрастных цветов и размеров шрифта, подходящих для пользователей с нарушениями зрения. Задание режима высокой контрастности определяется свойством SystemInformation.HighContrast Property.

Если свойство SystemInformation.HighContrast имеет значение true, то приложение использует следующие режимы.

  • Все элементы интерфейса пользователя отображаются с использованием системной схемы цветов.

  • Любая информация, передающаяся цветом, также передается с помощью визуальных или звуковых сигналов. Например, если конкретный элемент списка выделен красным шрифтом, можно также отобразить его полужирным шрифтом, чтобы пользователь, не различающий цвета, видел, что элемент выделен.

  • Опускаются все рисунки или узоры позади текста.

Приложение должно проверять значение свойства HighContrast при запуске и отвечать на системное событие UserPreferenceChanged. При изменении значения свойства HighContrast происходит событие UserPreferenceChanged.

В данном примере единственным элементом, не использующим системные параметры цвета, является lblCompanyName. Класс SystemColors используется для замены параметров цвета подписей на выбираемые пользователем системные цвета.

Чтобы эффективно включать режим высокой контрастности

  1. Создайте метод, задающий для подписи системные цвета.

    ' Visual Basic
    Private Sub SetColorScheme()
       If SystemInformation.HighContrast Then
          companyLabel.BackColor = SystemColors.Window
          companyLabel.ForeColor = SystemColors.WindowText
       Else
          companyLabel.BackColor = Color.Blue
          companyLabel.ForeColor = Color.Yellow
       End If
    End Sub
    
    // C#
    private void SetColorScheme()
    {
       if (SystemInformation.HighContrast)
       {
          companyLabel.BackColor = SystemColors.Window;
          companyLabel.ForeColor = SystemColors.WindowText;
       }
       else
       {
          companyLabel.BackColor = Color.Blue;
          companyLabel.ForeColor = Color.Yellow;
       }
    }
    
  2. Вызовите процедуру SetColorScheme в конструкторе формы (Public Sub New() в Visual Basic и public class Form1 в Visual C#). Для доступа к конструктору в Visual Basic необходимо открыть область Код, автоматически созданный конструктором форм Windows.

    ' Visual Basic 
    Public Sub New()
       MyBase.New()
       InitializeComponent()
       SetColorScheme()
    End Sub
    
    // C#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
    }
    
  3. Создайте процедуру обработки события с соответствующей сигнатурой, которая отвечает на событие UserPreferenceChanged.

    ' Visual Basic
    Protected Sub UserPreferenceChanged(ByVal sender As Object, _
    ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs)
       SetColorScheme()
    End Sub
    
    // C#
    public void UserPreferenceChanged(object sender, 
    Microsoft.Win32.UserPreferenceChangedEventArgs e)
    {
       SetColorScheme();
    }
    
  4. Добавьте код в конструктор формы после вызова метода InitializeComponents. Этот метод вызывает процедуру SetColorScheme .

    ' Visual Basic
    Public Sub New()
       MyBase.New()
       InitializeComponent()
       SetColorScheme()
       AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _
          AddressOf Me.UserPreferenceChanged
    End Sub
    
    // C#
    public Form1()
    {
       InitializeComponent();
       SetColorScheme();
       Microsoft.Win32.SystemEvents.UserPreferenceChanged 
          += new Microsoft.Win32.UserPreferenceChangedEventHandler(
          this.UserPreferenceChanged);
    }
    
  5. Добавьте код в метод Dispose перед вызовом метода Dispose базового класса для освобождения события при закрытии приложения. Для доступа к методу Dispose в Visual Basic необходимо открыть область "Код, автоматически созданный конструктором форм Windows".

    Примечание

    Код системного события выполняется в потоке, отдельно от главного приложения.Если не освободить событие, код, присоединенный к событию, будет выполняться даже после закрытия программы.

    ' Visual Basic
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing Then
          If Not (components Is Nothing) Then
             components.Dispose()
          End If
       End If
       RemoveHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, _
          AddressOf Me.UserPreferenceChanged
       MyBase.Dispose(disposing)
    End Sub
    
    
    // C#
    protected override void Dispose( bool disposing )
    {
       if( disposing )
       {
          if (components != null) 
          {
             components.Dispose();
          }
       }
       Microsoft.Win32.SystemEvents.UserPreferenceChanged 
          -= new Microsoft.Win32.UserPreferenceChangedEventHandler(
          this.UserPreferenceChanged);
       base.Dispose( disposing );
    }
    
  6. Нажмите клавишу F5 для запуска приложения.

Передача важной информации способами помимо звукового сигнала

В данном приложении никакая информация не передается только с помощью звукового сигнала. Если вы используете звук в своем приложении, следует также предусмотреть альтернативные способы передачи информации.

Чтобы обеспечить передачу важной информации способами помимо звукового сигнала

  1. Сделайте строку заголовка мигающей с помощью функции интерфейса API Windows FlashWindow. Пример вызова функций Windows API см. в разделе Пошаговое руководство. Вызов интерфейсов Windows API.

    Примечание

    У пользователя может быть включена служба визуального оповещения Windows, что также приведет к миганию окна при подаче системных звуковых сигналов через встроенные динамики компьютера.

  2. Выводите важную информацию в немодальном окне, чтобы пользователь мог реагировать на нее. (Подробнее см. в разделе Отображение модальных и немодальных форм Windows Forms.

  3. Выводите окно сообщения, получающее фокус клавиатуры. Этот способ не следует применять в момент, когда пользователь может осуществлять ввод с клавиатуры.

  4. Отображайте индикатор состояния в области уведомлений о состоянии панели задач. Дополнительные сведения см. в разделе Добавление значков приложений в элемент управления задачами с помощью компонента форм Windows Forms NotifyIcon. vbtskAddingApplicationIconsToTaskBarWithTrayIconControl

Тестирование приложения

Перед развертыванием приложения необходимо протестировать реализованные средства специальных возможностей.

Чтобы протестировать средства специальных возможностей

  1. Для проверки доступа с клавиатуры отключите мышь и выполните переходы по интерфейсу пользователя для каждого средства, используя только клавиатуру. Убедитесь, что все задачи можно выполнить с помощью клавиатуры.

  2. Для проверки режима высокой контрастности используйте компонент "Специальные возможности" в панели управления. Выберите вкладку "Экран" и установите флажок "Высокая контрастность". Пройдите по всем элементам управления и убедитесь, что отражаются изменения цвета и шрифта. Кроме того, убедитесь, что опущены рисунки или узоры под текстом.

    Примечание

    В Windows NT 4 значок "Специальные возможности" отсутствует в панели управления.Таким образом, этот способ изменения значения свойства SystemInformation.HighContrast не работает для Windows NT 4.

  3. Доступны также другие средства тестирования специальных возможностей приложения.

  4. Для тестирования демонстрации фокуса клавиатуры запустите экранную лупу. (Для этого нажмите кнопку Пуск, выберите Программы, Стандартные, Специальные возможности, затем щелкните Экранная лупа). Выполните переходы по интерфейсу пользователя, используя клавишу табуляции и мышь. Убедитесь, что все переходы правильно отображаются Лупой.

  5. Для проверки отображения элементов экрана запустите программу Inspect и перейдите на каждый элемент с помощью мыши и клавиши TAB. Убедитесь, что сведения, выводящиеся в полях "Name", "State", "Role", "Location" и "Value" окна "Inspect" для каждого объекта в интерфейсе являются полезными для пользователя. Программа Inspect устанавливается как часть пакета Microsoft® Active Accessibility® SDK, доступного по адресу https://msdn.microsoft.com/library/default.asp?url=/downloads/list/accessibility.asp.