Символьные сообщения


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

За программиста это делает Windows. Ранее уже встречался следующий код:

while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMesage(&msg); }

Это типичный цикл обработки сообщений, содержащийся в WinMain. Функция GetMessage заполняет поля структуры msg данными следующего сообщения из очереди. Вызов DispatchMesage вызывает соответствующую оконную процедуру. Между двумя этими функциями находится функция TranslateMessage.

Функция TranslateMessage преобразует аппаратные сообщения клавиатуры в символьные сообщения. Если этим сообщением является WM_KEYDOWN (WM_SYSKEYDOWN) и, если нажатие клавиши в сочетании с положением клавиши сдвига генерирует символ, тогда TranslateMessage помещает символьное сообщение в очередь сообщений.

  • Это символьное сообщение будет следующим, после сообщения о нажатии клавиши, которое функция GetMessage извлечет из очереди.

Вид символьных сообщений: несистемные – WM_CHAR,системные – WM_SYSCHAR.

  • Сообщения WM_SYSCHAR являются следствием сообщений WM_SYSKEYDOWN.

В большинстве случаев программы для Windows могут игнорировать все сообщения за исключением WM_CHAR.

  • Параметр lParam, передаваемый в оконную процедуру как часть символьного сообщения, является таким же, как и параметр lParam аппаратного сообщения клавиатуры, из которого сгенерировано символьное сообщение. Параметр wParam – это код символа ASCII.

Если Windows приложению необходимо обрабатывать символы клавиатуры, то ему придется обрабатывать сообщение WM_CHAR. Наиболее типичным кодом обработки сообщения WM_CHAR является следующий код:

case WM_CHAR: { char chCharCode = (char) wParam; // ASCII-код символа switch(chCharCode) { case ‘\b’: . . .; // введен символ Backspace break; case ‘\t’: . . .; // введен символ Tab break; case ‘\r’: . . .; // введен символ Enter break; case ‘A’: . . .; // введен прописной символ A break; case ‘a’: . . .; // введен строчныйо символ а break; … default: . . .; // введены другие символы break; } }; return 0;

Замечание. Программы обычно могут игнорировать WM_DEADCHAR и WM_SYSDEADCHAR. На некоторых, неамериканских клавиатуры, некоторые клавиши определяются добавлением диакритического знака к букве. Они называются немыми клавишами(dead keys), поскольку эти клавиши сами по себе не определяют символов.

Рассмотрим, с какими наборами символов работает система Windows. В операционной системе MS-DOS использовался расширенный набор символов, определенный фирмой IBM. В этот набор входят буквы английского алфавита, знаки пунктуации и псевдографики.

Для обеспечения возможности работы с символами кириллицы фирма Microsoft разработала расширенный набор символов с кириллицей. В терминологии Windows такие таблицы кодов называются наборами символов OEM (Original Equipment Manufacturer).

Сама же система Windows для представления символов использует набор символов ANSI. В этом наборе определены не все коды и отсутствуют символы псевдографики.

Если программа MS-DOS запускается в окне Windows, для нее выбирается набор символов OEM. Поэтому

  • В Windows используются как набор символов ANSI, так и набор символов OEM. По умолчанию в контекст отображения выбирается системный шрифт, для которого используется набор символов ANSI.

Для одинаковых символов наборы ANSI и OEM используют разные коды, это приводит к необходимости перекодировки символов, например, при переносе текстов, подготовленных в среде MS-DOS, в среду Windows. В составе программного интерфейса Windows имеются функции, которые берут на себя работу по преобразованию и перекодировке символов.

Работа с мышью

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

  • Для определения количества кнопок можно использовать вызов GetSystemMetrics с параметром SM_CMOUSEBUTTONS.

Когда пользователь перемещает мышь, Windows перемещает по экрану растровую картинку, которая называется курсор мыши (mouse cursor). Курсор мыши(растровая картинка) имеет вершину (hot spot) размером в один пиксель, точно указывающий положение мыши на экране.

В драйвере дисплея содержатся несколько предопределенных курсоров мыши, которые могут использоваться в программах. Наиболее типичным курсором является наклонная стрелка, которая называется IDC_ARROW (вершина курсора – острие стрелки). Курсор IDC_WAIT в виде песочных часов обычно используется для индикации того, что программа чем-то занята.

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

Курсор, устанавливаемый по умолчанию для конкретного окна, задается при определении структуры класс окна:

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

Приведем определения терминов, соответствующих действиям пользователя над кнопками мыши:

  • Щелчок – нажатие и отпускание кнопки мыши.
  • Двойной щелчок – двойное быстрое, идущее одно за другим, нажатие и отпускание кнопки мыши.
  • Перетаскивание – перемещение мыши при нажатой кнопке.


Дата добавления: 2017-01-26; просмотров: 1884;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.