Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Константы сообщений при работе с мышью и клавиатурой. Программная обработка констант сообщений



Процедура Translate Message передает структуру типа MSG обратно ядру Windows для преобразования константы сообщения, содержащей виртуальный код клавиши, в константу сообщения, содержащую физический код клавиши. Существует много кодовых таблиц, в которых одинаковым по функциональному назначению клавишам соответствуют различные физические коды. В кодировке Win-1251 символ кириллицы «А» имеет код 192, в кодировке ISO -176, а в кодировке КОИ-8 -225 (табл.18). Поэтому, чтобы не зависеть от конкретной кодовой таблицы, используемой в компьютере, применяют виртуальный код клавиш. Эту процедуру можно опустить, если Вы не работаете с клавиатурой. Например, если Вы нажали или отпустили клавишу на клавиатуре, то ядро сгенерирует сообщение структуры

MSG, в которой поле message будет содержать константу WM_KEYDOWN или WM_KEYUP, а поле wparam-код виртуальной клавиши. Перечислим некоторые коды виртуальных клавиш. VK_CONTROL –нажата клавиша CTRL;

VK_SHIFT –нажата клавиша SHIFT;

VK_MENU –нажата клавиша ALT;

VK_RETURN –нажата клавиша ENTER;

VK_BACK –нажата клавиша BACKSPACE;

VK_F1... VK_F9 –нажата клавиша из диапазона F1... F9; VK_INSERT –нажата клавиша INSERT;

VK_DELETE –нажата клавиша DELETE;

VK_SPACE –нажата клавиша SPACE;

VK_M-нажата клавиша M;

VK 1-нажата клавиша 1.

При помощи функции Translate Message константы сообщений WM_KEYDOWN и WM_KEYUP, содержа-щихся в поле message, преобразуются в константы WM_CHAR и WM_DEADCHAR, а код виртуальной клавиши, содержащийся в поле wparam, будет содержать код ANSI-клавиши. Процедура DispatchMessage выполняет диспетчеризацию сообщения, то есть вновь направляет сообщение в оконную функцию. Оконная функция Wind осуществляет непосредственную обработку сообщений. Первый параметр оконной функции-дескриптор окна, которому принадлежит сообщение, то есть дескриптор, возвращаемый функцией CreateWindowEx. Второй параметр-идентификатор (константа) сообщения, остальные-зависят от типа сообщения. Обычно wparam(3-йпараметр) содержит код сообщения(например, код виртуальной клавиши или код символа ANSI), в старшем слове параметра lparam содержится дескриптор окна, а в младшем слове-целое значение, уникальное для конкретного типа сообщения. Для ряда сообщений lparam содержит пару координат манипулятора мыши. Наша оконная функция обрабатывает всего лишь три сообщения-WM_PAINT, WM_LBUTTONUP, WM_DESTROY. Сообщение WM_PAINT позволяет отображать графическую информацию в окне и перерисовывать содержимое окна после его сворачивания. При нажатии и последующем отпускании и левой кнопки мыши генерируется сообщение WM_LBUTTONUP, которое поступает в цикл обработки сообщений оконной функции. В результате с помощью функции SendMessage генерируется сообщение к ОС Windows-WM_CLOSE, которое означает, что ОС должна закрыть окно (дескриптор ghWnd). Тоже сообщение посылается к Windows и при выборе команды Закрыть из системного меню или после нажатия клавиш ALT+F4. Определив, какому окну принадлежит сообщение, Windows генерирует ответное сообщение WM_DESTROY, которое, попав в оконную функцию, завершает процесс графического отображения информации в окне(функция EndPaint) и с помощью процедуры PostQuitMessage генерирует последнее сообщение -WM_QUIT. Получив это сообщение, функция GetMessege возвращает нулевое значение, и цикл обработки сообщений заканчивается и программа завершается. Ввод информации может происходить не только с клавиатуры, но и с использованием манипулятора мышь. При этом ядро Windows, прежде чем поместить сообщение в очередь, проверяет, не исходит ли предыдущее сообщение также от мыши, так как в большинстве случаев необходимо знать лишь конечную точку перемещения мыши.Таблица45

Константы сообщений Действие над мышью WM_MOUSEMOVE Перемещение WM_LBUTTONDOWN Нажата левая кнопка WM_LBUTTONUP Отпущена левая кнопка WM_MBUTTONDOWN Нажата средняя кнопка WM_MBUTTONUP Отпущена средняя кнопка WM_RBUTTONDOWN Нажата правая кнопка WM_RBUTTONUP Отпущена правая кнопка WM_LBUTTONDBLCLK Двойное нажатие левой кнопки WM_MBUTTONDBLCLK Двойное нажатие средней WM_RBUTTONDBLCLK Двойное нажатие правой кнопки





Дата публикования: 2014-12-28; Прочитано: 295 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...