русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Получение времени нажатия клавиши и состояния управляющих клавиш.

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

Существует ряд управляющих клавиш, от состояния которых зависит реакция системы (и программ) на нажатие остальных клавиш. К таким клавишам относятся: (<Shift>, <Ctrl>, <Alt>, <CapsLock>, <NumLock>, <ScrollLock>). Программа может получить их состояния с помощью функции GetKeyState. Например, для получения состояния SHIFT необходимо выполнить:

GetKeyState(VK_SHIFT);

где в качестве параметра выступает виртуальный код нужной управляющей клавиши.

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

Символьные сообщения.

Ранее уже говорилось, что знания о виртуальном коде и положениях управляющих клавиш недостаточно для определения нажатого символа. Операционная система позволяет поддерживать большое число национальных клавиатур, алфавит которых может значительно отличаться друг от друга. В связи с этим, нажатие одной и той же клавиши может означать нажатие разных символов, определяемых выбранным в данный момент драйвером клавиатуры. Например, нажатие клавиши с буквой “V”, при выбранном драйвере русской или украинской клавиатуры, будет означать нажатие символа “М”.

Данное преобразование выполняет функция TranslateMessage, которая преобразует аппаратные сообщения в символьные, используя при этом состояние управляющих клавиш и драйвер клавиатуры. Обычно это происходит в цикле обработки сообщений:

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

Функция TranslateMessage является своеобразным диспетчером сообщений. Если очередное сообщение, выбранное функцией GetMessage из очереди сообщений, является символьным, то TranslateMessage ставит в очередь сообщений к приложению еще одно сообщение – символьное. При этом, аппаратное сообщение продолжает свой путь в цикле обработки сообщений и попадает в оконную процедуру окна приложения через функцию DispatchMessage.

Аналогично аппаратным сообщениям, существует четыре символьных сообщения:

Типы сообщений Клавиша нажата Клавиша отпущена
Несистемные символьные сообщения WM_CHAR WM_DEADCHAR
Системные символьные сообщения WM_SYSCHAR WM_DEADCHAR

Сообщения WM_CHAR являются следствием сообщений WM_KEYDOWN. В большинстве приложений предпочтительным является использование именно символьных сообщений. Параметр lParam, в случае сообщения WM_CHAR, является таким же, как и соответствующий параметр в аппаратном сообщении, а wParam – определяет код символа ASCII.

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

Просмотров: 554


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.