Захват и освобождение окном мыши
Параметр wParam каждой кнопки включает маску бит, определяющую текущее состояние клавиатуры и кнопок мыши такое, например, как нажаты ли кнопки мыши, клавиша Shift и клавиша Ctrl. Параметр lParam содержит координаты x и y курсора мыши.
Windows посылает окну сообщение мыши только в том случае, если курсор мыши находится в окне, или ввод от мыши захвачен с помощью функции SetCapture. Эта функция предписывает Windows послать все сообщения ввода мыши (вне зависимости от того, где находится курсор мыши) в указанное окно. Прикладная программа обычно использует эту функцию для того, чтобы взять на себя управление при выполнении некоторых критических операций, таких как выборка с помощью мыши некоторого объекта в области пользователя. Захват ввода от мыши предотвращает получение управления другой прикладной программой до завершения операции.
Поскольку мышь является разделяемым ресурсом, важно освободить его сразу по завершении операции. Освобождение мыши делается функцией ReleaseCapture. Для определения окна, захватившего мышь, используется функция GetCapture.
Обработка сообщений от мыши
При вводе с помощью "мыши" Windows посылает прикладной программе сообщение от "мыши", когда пользователь перемещает курсор "мыши" (указатель) в/через окно или нажимает/освобождает кнопку "мыши", находясь в окне
Сообщение Описание
WM_MOUSEMOVE Пользователь перемещает курсор мыши в/через окно.
WM_LBUTTONDOWN Пользователь нажимает левую кнопку.
WM_LBUTTONUP Пользователь отпускает левую кнопку.
WM_LBUTTONDBLCLK Пользователь нажимает, отпускает и вновь нажимает левую кнопку (в рамках отпущенного системой времени).
WM_MBUTTONDOWN Пользователь нажимает среднюю кнопку.
WM_MBUTTONUP Пользователь отпускает среднюю кнопку.
WM_MBUTTONDBLCLK Пользователь нажимает, отпускает и вновь нажимает среднюю кнопку(в рамках отпущенного системой времени).
WM_RBUTTONDOWN Пользователь нажимает правую кнопку.
WM_RBUTTONUP Пользователь отпускает правую кнопку.
WM_RBUTTONDBLCLK Пользователь нажимает, отпускает вновь нажимает правую кнопку (в рамках отпущенного системой времени).
Координаты x,y
Параметр lParam содержит координаты x и y курсора мыши.
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
Курсор мыши. Управление курсором.
Для того, чтобы использовать курсор определенной формы, вы должны получить его дескриптор с помощью функции LoadCursor. После того, как ваша программа загрузила курсор, она может использовать его при необходимости.
Программа управляет формой курсора двумя методами:
- Можно использовать встроенные в Windows курсоры.
- Можно использовать собственные курсоры.
- Использовать LoadCursor необходимо в обработчике события WM_MOUSEMOVE
Сообщения мыши в клиентской и не клиентской области окна.
Windows посылает окну сообщение мыши только в том случае, если курсор мыши находится в окне, или ввод от мыши захвачен с помощью функции SetCapture. Эта функция предписывает Windows
Таймер
Установка таймера
Информация от таймера поступает двумя способами:
- в виде сообщения WM_TIMER через очередь прикладной программы.
- от функции многократного вызова, которая определяется
при вызове функции SetTimer.
Ниже показано, как установить ввод от таймера, используя сообщение WM_TIMER, на пятисекундный интервал:
idTimer = SetTimer(hWnd, 1, 5000, (FARPROC) NULL);
В примере интервал таймера устанавливается равным 5000миллисекунд. Это означает, что таймер будет генерировать сообщение каждые 5 сек. Второй аргумент, если он не равен 0, используется вашей программой для идентификации таймера.
Последний аргумент равный NULL означает, что функция многократного вызова для обработки ввода от таймера отсутствует, так что Windows посылает сообщение ввода таймера через очередь прикладной программы.
Функция таймера
При установке таймера функцией SetTimer можно определить функцию, которая будет вызываться при каждом событии от таймера. Для этого последним параметром в SetTimer передается указатель на функцию обработчик. Если он есть, то просто происходит вызов функции, если нет, то общение происходит через очередь прикладной программы.
Снятие таймера
Снятие таймера осуществляется функцией:
KillTimer(hWnd, idTimer),
ГдеhWnd – handle окна
IdTimer – уникальный идентификатор удаляемого таймера.
После удаления перестают поступать события от таймера.