Страница 16 из 17
Обработка символьных сообщений Оконная процедура принимает символьное сообщение тогда, когда функция TranslateMessage транслирует код виртуальной клавиши соответствующий клавише знака. Символьными сообщениями являются WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, и WM_SYSDEADCHAR. Типичная оконная процедура игнорирует все символьные сообщения кроме WM_CHAR. Функция TranslateMessage генерирует сообщение WM_CHAR тогда, когда пользователь нажимает какую-либо из следующих клавиш. Любую символьную клавишу BACKSPACE ENTER (перевод каретки) ESC SHIFT+ENTER (перевод строки) TAB
Когда оконная процедура принимает сообщение WM_CHAR, она должна проверить код буквы, который сопровождает сообщение, чтобы установить, как обрабатывать символ. Код буквы находится в параметре wParam сообщения. Следующий пример показывает общую схему оконной процедуры, где типичная прикладная программа используется для приема и обработки символьных сообщений. case WM_CHAR: switch (wParam) { case 0x08: . . /* Обработка BACKSPACE . */ . break;
case 0x0A: . . /* Обработка перевода строки. */ . break;
case 0x1B: . . /* Обработка Esc. */ . break;
case 0x09: . . /* Обработка табуляции TAB. */ . break;
case 0x0D: . . /* Обработка перевода каретки. */ . break;
default: . . /* Обработка воспроизводимых символов. */ . break; }
Использование каретки Окно, которое принимает ввод информации с клавиатуры, обычно отображает символы, которые пользователь вводит с клавиатуры в рабочей области окна. Окно должно использовать каретку, чтобы указать позицию в рабочей области, где появится следующий символ. Окно должно также создавать и показывать на экране каретку, когда оно принимает фокус клавиатуры и скрывать и уничтожать каретку, когда оно теряет фокус. Окно может исполнять эти операции в ходе обработки сообщений WM_KILLFOCUS и WM_SETFOCUS. Для получения дополнительной информации о каретках, см. главу Каретки. |