Операционная система Microsoft Windows 3.1 для программиста -том 1


Символьные клавиатурные сообщения


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

Теоретически распознавание регистра можно выполнить с помощью только что описанной функции GetKeyState, однако есть более удобный способ, который к тому же обеспечивает учет национальных алфавитов. Этот способ основан на применении функции TranslateMessage, которая включается в цикл обработки сообщений:

while(GetMessage(&msg, 0, 0, 0)) { TranslateMessageTranslateMessage(&msg); DispatchMessage(&msg); }

Функция TranslateMessage преобразует клавиатурные сообщения WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN и WM_SYSKEYUP в символьные сообщения WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, WM_SYSDEADCHAR. Образованные символьные сообщения помещаются в очередь сообщений приложения, причем оригинальные клавиатурные сообщения из этой очереди не удаляются.

Параметр lParam для символьного сообщения равен параметру lParam клавиатурного сообщения, из которого первое было образовано, то есть в процессе преобразования значение lParam не изменяется.

Параметр wParam содержит код символа, соответствующего нажатой клавише в так называемом стандарте ANSI, принятом в Windows для представления символов. Этот код определяется функцией TranslateMessage с учетом состояния клавиш <Control>, <Shift>, <Alt>, <Caps Lock> и используемого национального языка.

Из всех четырех символьных сообщений приложения чаще всего используют сообщение WM_CHAR, которое передается функции окна в результате трансляции сообщения WM_KEYDOWN. Сообщение WM_SYSCHAR образуется из сообщения WM_SYSKEYDOWN и обычно игнорируется приложением (передается функции DefWindowProc).

Сообщения WM_DEADCHAR и WM_SYSDEADCHAR образуются при использовании клавиатур, имеющих дополнительную клавишу для снабжения символов диакритическими знаками (например, символ "Ў" снабжен диакритическим знаком).


Начало  Назад  Вперед



Книжный магазин