Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 5 Клавиатура.doc
Скачиваний:
57
Добавлен:
08.05.2015
Размер:
60.93 Кб
Скачать

Сообщение Клавиша или код

WM_KEYDOWN Виртуальная клавиша "А"

WM_CHAR ASCII код "а"

WM_KEYUP Виртуальная клавиша "А"

Если вы нажимаете "А" при нажатой клавише <Shift>, то оконная процедура получит следующий ряд сообщений:

Сообщение Клавиша или код

WM_KEYDOWN Виртуальная клавиша VK_SHIFT

WM_KEYDOWN Виртуальная клавиша "А"

WM_CHAR ASCII код "А"

WM_KEYUP Виртуальная клавиша "А"

WM_KEYUP Виртуальная клавиша VK_SHIFT

Символьные сообщения приходят в программу не только, когда пользователь нажимает клавиши с буквами. Например, нажатие табуляции приведет к приходу символьного сообщения с кодом '\t', возврата каретки - '\r', забоя – '\b'.

Каретка.

Возвращаясь к обсуждению концепции "фокуса ввода", вспомним, что сообщения клавиатуры приходит в окно, являющееся активным и имеющее "фокус ввода". Обрабатывая сообщения WM_SETFOCUS и WM_KILLFOCUS, программа может определить, имеет ли она фокус ввода, или нет.

Работая с реальными программами, например, с текстовыми редакторами, вам часто необходимо определить также то место внутри окна, куда необходимо осуществлять ввод информации. Когда вы набираете текст, то, как правило, какой-либо символ (например, мигающий прямоугольник, либо символ подчеркивания) показывает вам место, где следующий набираемый вами символ появится на экран. Ваша программа может сама следить за рисованием, управлением данным символом в зависимости от действий пользователя. Однако, Windows предоставляет вам предопределенный объект, реализующий перечисленные функции, и носящий имя "каретка" (caret).

Каретка является общесистемным ресурсом (как, впрочем, и курсор, который связан с мышью), единственным в операционной системе, и может использовать только окном, имеющим фокус ввода. Поэтому, основным правилом использования каретки является следующее: оконная процедура вызывает функцию CreateCaret при обработке сообщения WM_SETFOCUS (получении фокуса ввода), и функцию DestroyCaret при обработке сообщения WM_KILLFOCUS (потере фокуса).

Приведем основные функции работы с кареткой:

CreateCaret(hWnd, pImage, cxChar, cyChar); // создание каретки

SetCaretPos(cxChar, cyChar); // установить позицию каретки в позицию cxChar, cyChar

GetCaretPos(); // получить положение каретки

GetCaretBlinkTime(); // Получение частоты мигания

SetCaretBlinkTime(); // Установка частоты мигания

ShowCaret(hWnd); // показать каретку

HideCaret(hWnd); // спрятать каретку

DestroyCaret(); // удалить каретку