Окт 16 2009

Клавиши и символы

Клавиатура всегда генерирует некоторые числовые коды, но ее можно рассматривать либо как совокупность отдельных физических клавиш, либо как средство генерации кодов символов.
В первом случае любой генерируемый код должен идентифицировать клавишу и показывать, нажата она или отпущена. Во втором варианте код, вырабатываемый при нажатии клавиши, идентифицирует уникальный символ из набора символов. По умолчанию используется набор символов ANSI1.
У многих клавиш современного компьютера нет кодов символов. Ни функциональные клавиши, ни клавиши управления курсором их не генерируют. Поэтому в программах, использующих ввод с клавиатуры нетривиальным способом, обычно приходится иметь дело с клавиатурой и как с совокупностью клавиш, и как с генератором символов одновременно.
Клавиши можно разделить на следующие четыре группы: Клавиши-переключатели — Caps Lock, Num Lock, Scroll Lock и в некоторых случаях клавиша Insert. При нажатии такой клавиши включается ее состояние, а при повторном нажатии — выключается. Как правило, на клавиатуре есть световые индикаторы состояния клавиш-переключателей.
Клавиши управления регистром — Shift, Ctrl и Alt. В нажатом состоянии такая клавиша меняет интерпретацию других клавиш. Иногда такие клавиши называют клавишами-модификаторами.
Клавиши, не генерирующие символов, — функциональные клавиши, клавиши управления курсором, Pause, Delete.
Символьные клавиши — буквы, цифры и другие символы, пробел, Tab, Backspace, Esc и Enter. Впрочем, клавиши Tab, Backspace, Esc и Enter также можно рассматривать как клавиши без символов.
Сообщения клавиатуры, которые приложение получает от Windows, можно разделить на «аппаратные» (keystrokes) и «символьные» (characters). Это разделение соответствует указанной выше двойственной интерпретации клавиатуры.


Окт 16 2009

Фокус ввода

Все приложения, работающие одновременно под управлением Windows, должны иметь возможность получать данные от клавиатуры. Если какое-то приложение имеет более одного окна, то клавиатура должна разделяться и между окнами в рамках одного приложения. Это разделение Windows реализует, используя понятие фокуса ввода. Фокус ввода (keyboard focus) — это временное свойство окна, которое означает, что все сообщения от клавиатуры направляются именно этому окну. В каждый момент времени из всех окон, имеющихся на экране, только одно окно может иметь фокус ввода.
Понятие фокуса ввода тесно связано с понятием активного окна. Активное окно — это окно верхнего уровня, с которым в данный момент работает пользователь. Система выделяет текст заголовка активного окна, поэтому отыскать его на экране довольно просто. Если активное окно минимизировано, то Windows выделяет текст заголовка на панели задач.
Фокусом ввода всегда владеет либо активное окно, либо одно из его дочерних окон. Часто дочерними окнами являются элементы управления — кнопки, переключатели, флажки, текстовые поля и списки, которые обычно размещаются в окне диалога. Элементы управления по-разному показывают, что они находятся в фокусе. Так, вокруг текста кнопки выводится точечная линия, а текстовое поле показывает, что оно получило фокус ввода, при помощи мигающего курсора.
Если активное окно минимизировано, то окна с фокусом ввода нет. Windows продолжает пересылать программе сообщения клавиатуры, но эти сообщения выглядят иначе, чем сообщения, направляемые активным неминимизированным окнам.
Обрабатывая сообщения WNLSETFOCUS и WM_KILLFOCUS, оконная процедура может определить текущий статус связанного с ней окна. Первое сообщение показывает, что окно получило фокус ввода, второе — что окно потеряло фокус ввода.
Для работы с фокусом ввода предусмотрены следующие функции:
Функция HWND SetFocus(HWND hWnd) устанавливает фокус ввода на окно hWnd, возвращая дескриптор окна, которое располагало фокусом до вызова функции.
Функция HWND GetFocus() возвращает дескриптор окна, имеющего фокус ввода в текущий момент.


Окт 16 2009

Клавиатура

Windows обеспечивает поддержку клавиатуры, независимую от аппаратуры и от национального языка, используемого в системе. Независимость от аппаратуры достигается благодаря использованию программного драйвера клавиатуры. Независимость от национального языка реализуется выбором нужной кодовой страницы
Каждой клавише на клавиатуре соответствуют два уникальных целых числа, называемых скан-кодом нажатия и скан-кодом отпускания клавиши. Скан-код (scan code) является аппаратно-зависимым, то есть на клавиатурах разных производителей одна и та же клавиша может иметь разные скан-коды1. Когда пользователь нажимает или отпускает клавишу, драйвер клавиатуры получает соответствующие скан-коды. Полученный скан-код преобразуется драйвером в виртуальный код клавиши (virtual-key code). Этот код является уже аппаратно-независимым, поэтому в системе Windows он однозначно идентифицирует нажатую или отпущенную клавишу. Завершающим действием драйвера является создание сообщения, содержащего скан-код, виртуальный код клавиши и другую информацию о нажатой/отпущенной клавише. Это сообщение помещается в системную очередь сообщений.
Windows извлекает сообщение из системной очереди и передает его в очередь сообщений того приложения, которое имеет активное окно.
Далее сообщение извлекается в известном вам цикле обработки сообщений, поступая в конечном счете на обработку в соответствующую оконную процедуру.


Окт 16 2009

Средства ввода

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


« Предыдущая страница