Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 - 8 лаба по оссп в исходнике отавлены нужные...doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.17 Mб
Скачать

Цикл получения сообщений

Минимальный стандартный цикл сообщений имеет такой вид:

while (GetMessage (&msg, 0, 0, 0))

{

TranslateMessage (&msg);

DispatchMessage (&msg);

}

Программа GetMessage считывает сообщения из очереди аппаратных событий и из очереди сообщений конкретной программы. Для каждого найденного сообщения вызывается программа TranslateMessage, которая игнорирует все сообщения, кроме WM_KEYDOWN и WM_SYSKEYDOWN.

Роль функции TranslateMessage проста. Она получает данные в виде виртуальных кодов из сообщения WM_KEYDOWN (или WM_SYSKEYDOWN) и вызывает драйвер клавиатуры для преобразования виртуальных кодов в коды ANSI. Для клавиш, не имеющих кодов ANSI, преобразование не производится. В результате генерируется сообщение WM_CHAR (или WM_SYSCHAR), которое размещается в очередь сообщений потока процесса.

В табл. 3.2 и 3.3 приведены сообщения, генерируемые при работе с символьными клавишами.

Таблица 3.2

Сообщения, генерируемые при вводе строчного символа

Сообщение

wParam

WM_KEYDOWN

Виртуальный код символа

WM_CHAR

ANSI – код символа

WM_KEYUP

Виртуальный код символа

Таблица 3.3

Сообщения, генерируемые при вводе прописного символа

Сообщение

wParam

WM_KEYDOWN

Виртуальный код VK_SHIFT

WM_KEYDOWN

Виртуальный код символа

WM_CHAR

ANSI – код символа

WM_KEYUP

Виртуальный код символа

WM_KEYUP

Виртуальный код VK_SHIFT

В некоторых неанглоязычных странах существуют специальные комбинации клавиш для создания диактических знаков. Эти комбинации называются мертвыми, так как их нажатие не создает символа, а модифицирует его. Для таких клавиш в соответствии с сообщением WM_KEYDOWN (WM_SYSKEYDOWN) программа TranslateMessage генерирует сообщение WM_DEADCHAR (WM_SYS-DEADCHAR). Можно игнорировать это сообщение, так как Windows сама создаст нужный символ.

Результатом ввода с клавиатуры является сообщение WM_CHAR, создаваемое программой TranslateMessage. Затем сообщения WM_KEYDOWN и WM_SYSKEYDOWN помещаются программой DispatchMessage в оконную процедуру для обработки.

Для организации надежной обработки ввода символов нужно отфильтровать некоторые сообщения WM_CHAR, которые были созданы после нажатия «непечатных» символьных клавиш. К таким клавишам относятся, например, BackSpace, Tab и Return. Нажатие этих клавиш, как и других, требует специальной, отличной от обычных символьных клавиш, обработки.

Таблица 3.4

Коды ansi

Сочетание клавиш

Код

Описание

Десятичный

Шестнадцатеричный

Ctrl + A

10

16

Ctrl + G

1 – 7

1 – 7

Непечатные символы

BackSpace

8

8

Клавиша возврата (VK_BACK)

Ctrl + H

8

8

Эмуляция клавиш возврата (VK_BACK)

Tab

9

9

Клавиша табуляции (VK_TAB)

Ctrl + I

9

9

Эмуляция клавиши табуляции (VK_TAB)

Ctrl + J

10

A

Перевод строки

Ctrl + К, Ctrl + L

11 – 12

В – С

Непечатные символы

Return

13

D

Клавиша ввода (VK_RETURN)

Ctrl + M

13

D

Эмуляция ввода (VK_RETURN)

Ctrl + N, Ctrl + Z

15 – 26

E – 1A

Непечатные символы

Esc

27

1B

Клавиша выхода (VK_ESCAPE)