Обзор сообщений
18
От клавиатуры могут поступать четыре сообщения : WM_KEYDOWN , WM_KEYUP, WM_SYSKEYDOWN , WM_SYSKEYUP. При нажатии клавиши генерируется сообщение WM_KEYDOWN или WM_SYSKEYDOWN , в зависимости от того , какая нажата клавиша и была ли эта клавиша нажата в комбинации с <Alt>. Соответственно при отпускании клавиши генерируется сообщение WM_KEYUP или WM_SYSKEYUP. Параметр wParam этих сообщений содержит , так называемый , код виртуальной клавиши , соответствующий некоторой физической клавише. Коды виртуальных клавиш определены как константы с префиксом VK_ . Параметр lParam содержит OEM scan-код клавиши (тот самый код , который получают в регистре AH программы MS DOS при вызове INT 16h) , счетчик повторов (при удерживании нажатой клавиши несколько сообщений сливаются в одно с соответствующим счетчиком повторов), флаг расширенной клавиатуры (устанавливается для клавиш , имеющихся только на 101-клавишной клавиатуре) , код контекста ( 1 - комбинация с <Alt> , 0 - нет) , флаги предыдущего состояния клавиши и флаг изменения состояния клавиши (см. справочную документацию или электронный справочник WIN32 Programmer’s Reference системы программирования BorlandC++ 5.01). Для получения информации о состоянии клавиш используются также функции GetKeyState , GetAsyncKeyState , GetKeyboardState , GetKeyboardType , GetKeyNameText.
Функция TranslateMessage преобразует клавиатурные сообщения в символьные сообщения WM_CHAR , WM_SYSCHAR , WM_DEADCHAR , WM_SYSDEADCHAR. Как правило, приложение обрабатывает только сообщение WM_CHAR. Образованные символьные сообщения помещаются в очередь сообщений приложения , причем оригинальные клавиатурные сообщения из этой очереди не удаляются. Символьные сообщения используются для непосредственного определения символа по нажатой клавише (код символа в стандарте ANSI заносится в параметр wParam сообщения, параметр lParam содержит ту же информацию, что и для рассмотренных выше оригинальных клавиатурных сообщений). Следует отметить , что Windows использует кодировку символов ANSI , отличную от кодировки OEM MS DOS. Для перекодировки используются функции CharToOem , CharToOemBuff , OemToChar , OemToCharBuff , CharLower , CharLowerBuff , CharUpper , CharUpperBuff , CharNext , CharPrev , VkKeyScanEx. Для более подробной информации следует обратиться к справочной документации или электронному справочнику WIN32 Programmer’s Reference системы программирования BorlandC++ 5.01. Для использования функции TranslateMessage ее необходимо включить в цикл обработки сообщений :
предыдущаяследующая