Пошаговое руководство. Создание 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) для выбора начинки, две кнопки с надписями "Заказать" и "Отмена", а также меню с командой "Выход".
Пользователь вводит имя заказчика, размер пиццы и требуемые начинки. Когда пользователь нажимает кнопку "Заказать", сводка заказа и его цена отображаются в окне сообщения, а элементы управления очищаются и становятся готовыми к приему следующего заказа. Когда пользователь нажимает кнопку "Отмена", элементы управления очищаются и становятся готовыми к приему следующего заказа. Когда пользователь выбирает в меню команду "Выход", программа закрывается.
Основное внимание в данном пошаговом руководстве уделяется не коду для системы розничной продажи, а специальным возможностям интерфейса пользователя. В примере демонстрируются средства специальных возможностей для некоторых часто используемых элементов управления, таких как кнопки, переключатели, поля и метки.
Чтобы начать разработку приложения
- Создайте новое приложение Windows в Visual Basic или Visual C#. Назовите проект PizzaOrder. Подробные сведения смотрите в разделе Создание новых решений и проектов.
Добавление элементов управления в форму
При добавлении элементов управления в форму придерживайтесь следующих правил для того, чтобы приложение было доступным для пользователей с физическими ограничениями.
Установите свойства 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 используется для замены параметров цвета подписей на выбираемые пользователем системные цвета.
Чтобы эффективно включать режим высокой контрастности
Создайте метод, задающий для подписи системные цвета.
' 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; } }
Вызовите процедуру 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(); }
Создайте процедуру обработки события с соответствующей сигнатурой, которая отвечает на событие 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(); }
Добавьте код в конструктор формы после вызова метода 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); }
Добавьте код в метод 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 ); }
Нажмите клавишу F5 для запуска приложения.
Передача важной информации способами помимо звукового сигнала
В данном приложении никакая информация не передается только с помощью звукового сигнала. Если вы используете звук в своем приложении, следует также предусмотреть альтернативные способы передачи информации.
Чтобы обеспечить передачу важной информации способами помимо звукового сигнала
Сделайте строку заголовка мигающей с помощью функции интерфейса API Windows FlashWindow. Пример вызова функций Windows API см. в разделе Пошаговое руководство. Вызов интерфейсов Windows API.
Примечание
У пользователя может быть включена служба визуального оповещения Windows, что также приведет к миганию окна при подаче системных звуковых сигналов через встроенные динамики компьютера.
Выводите важную информацию в немодальном окне, чтобы пользователь мог реагировать на нее. (Подробнее см. в разделе Отображение модальных и немодальных форм Windows Forms.
Выводите окно сообщения, получающее фокус клавиатуры. Этот способ не следует применять в момент, когда пользователь может осуществлять ввод с клавиатуры.
Отображайте индикатор состояния в области уведомлений о состоянии панели задач. Дополнительные сведения см. в разделе Добавление значков приложений в элемент управления задачами с помощью компонента форм Windows Forms NotifyIcon. vbtskAddingApplicationIconsToTaskBarWithTrayIconControl
Тестирование приложения
Перед развертыванием приложения необходимо протестировать реализованные средства специальных возможностей.
Чтобы протестировать средства специальных возможностей
Для проверки доступа с клавиатуры отключите мышь и выполните переходы по интерфейсу пользователя для каждого средства, используя только клавиатуру. Убедитесь, что все задачи можно выполнить с помощью клавиатуры.
Для проверки режима высокой контрастности используйте компонент "Специальные возможности" в панели управления. Выберите вкладку "Экран" и установите флажок "Высокая контрастность". Пройдите по всем элементам управления и убедитесь, что отражаются изменения цвета и шрифта. Кроме того, убедитесь, что опущены рисунки или узоры под текстом.
Примечание
В Windows NT 4 значок "Специальные возможности" отсутствует в панели управления.Таким образом, этот способ изменения значения свойства SystemInformation.HighContrast не работает для Windows NT 4.
Доступны также другие средства тестирования специальных возможностей приложения.
Для тестирования демонстрации фокуса клавиатуры запустите экранную лупу. (Для этого нажмите кнопку Пуск, выберите Программы, Стандартные, Специальные возможности, затем щелкните Экранная лупа). Выполните переходы по интерфейсу пользователя, используя клавишу табуляции и мышь. Убедитесь, что все переходы правильно отображаются Лупой.
Для проверки отображения элементов экрана запустите программу 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.