
- •1. Сообщение wm_paint
- •2. Рисование графических примитивов
- •2.1. Создание кистей и перьев
- •2.2. Выбор объектов
- •2.3. Рисование прямоугольника
- •2.4. Рисование эллипса
- •2.5. Рисование линий
- •3. Обработка нажатий клавиш мыши
- •4. Обработка сообщений от клавиатуры
- •5.Порядок выполнения лабораторной работы
- •6. Контрольные вопросы
- •Приложение
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 - горизонтальная позиция курсора, относительно левого верхнего угла клиентской области.
Верхнее слово параметра lParam – yPos - горизонтальная позиция курсора, относительно левого верхнего угла клиентской области.
Окно может принимать сообщения 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)
В приложении приведена демонстрационная программа, которая рисует прямоугольник, эллипс и треугольник посредством линий, а также выводит текст и обрабатывает нажатие левой клавиши мыши - выводит по нажатию координаты, где было совершено нажатие.