Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб3.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
116.22 Кб
Скачать

3. Обработка нажатий клавиш мыши

Для обработки нажатий клавиш мыши в Windows предусмотрены такие сообщения как:

WM_LBUTTONDOWN – сообщение посылается, когда пользователь нажимает на левую клавишу мыши

WM_LBUTTONDBLCLK - сообщение посылается при двойном щелчке на левой клавише мыши

WM_RBUTTONDOWN – сообщение посылается, когда пользователь нажимает на правую клавишу мыши

WM_RBUTTONDBLCLK - сообщение посылается при двойном щелчке на правой клавише мыши

WM_LBUTTONUP – сообщение посылается, когда пользователь отпускает левую клавишу мыши

WM_RBUTTONUP - сообщение посылается, когда пользователь отпускает правую клавишу мыши

WM_MBUTTONDOWN - сообщение посылается, когда пользователь нажимает на среднюю клавишу мыши

WM_MBUTTONDBLCLK - сообщение посылается при двойном щелчке на средней клавише мыши

WM_MBUTTONUP - сообщение посылается, когда пользователь отпускает среднюю клавишу мыши

WM_MOUSEMOVE - сообщение посылается при передвижении курсора

Параметры вышеуказанных сообщений:

fwKeys = wParam; // флаги

xPos = LOWORD(lParam); // горизонтальная позиция курсора

yPos = HIWORD(lParam); // вертикальная позиция курсора

Флаги fwKeys – значение параметра wParam может быть комбинацией следующих значений:

MK_CONTROL Установлен, если клавиша CTRL нажата.

MK_LBUTTON Установлен, если левая клавиша мыши нажата.

MK_MBUTTON Установлен, если средняя клавиша мыши нажата.

MK_RBUTTON Установлен, если правая клавиша мыши нажата

MK_SHIFT Установлен, если клавиша SHIFT нажата

Нижнее слово параметра lParam – хPos - горизонтальная позиция курсора, относительно левого верхнего угла клиентской области.

Верхнее слово параметра lParamyPos - горизонтальная позиция курсора, относительно левого верхнего угла клиентской области.

Окно может принимать сообщения WM_LBUTTONDBLCLK только в том случае, если содержит стиль CS_DBLCLKS.

Для обработки сообщений от мыши, надо добавить обработчик сообщения в функцию окна

4. Обработка сообщений от клавиатуры

Приведем некоторые наиболее используемые сообщения, связанные с нажатием клавиш на клавиатуре.

Сообщение WM_KEYDOWN посылается окну при нажатии не системной клавиши. Несистемная клавиша - это клавиша, нажатая без клавиши ALT. Сообщение WM_KEYDOWN переводится с помощью функции TranslateMessage в сообщение WM_CHAR.

WM_KEYDOWN

nVirtKey = (int) wParam; // виртуальный код клавиши

lKeyData = lParam; // данные о клавише

WM_CHAR

chCharCode = (TCHAR) wParam; // код символа

lKeyData = lParam; // данные о клавише

lKeyData - значение lParam:

Описание битов значения:

0-15 - счетчик повторений клавиши при ее удерживании.

16-23 - скан код

24 - определяет является ли клавиша расширенной, такой как правый ALT и CTRL, которые появились на 101 или 102 - клавишной клавиатуре:

1 - расширенная клавиша иначе - 0

25-28 - зарезервировано, не используется

29 - контекстный код: 1 - если ALT удерживалась при нажатии клавиши, иначе 0 (всегда равен нулю для WM_KEYDOWN)

30 - определяет предыдущее состояние клавиши. Значение равно 1, если клавиша нажата до того как сообщение отправлено, 0 - если клавиша отпущена.

31 - определяет промежуточное состояние, значение равно единице, если клавиша отпущена, 0 - если нажата (всегда равен нулю для WM_KEYDOWN)

В приложении приведена демонстрационная программа, которая рисует прямоугольник, эллипс и треугольник посредством линий, а также выводит текст и обрабатывает нажатие левой клавиши мыши - выводит по нажатию координаты, где было совершено нажатие.