- •Вопрос 1. Вывод текста. Шрифты. Параметры шрифтов ………………………3
- •Вопрос 2. Обработка сообщений от мыши и клавиатуры. Понятие
- •Вопрос 1. Вывод текста. Шрифты. Параметры шрифтов.
- •Типы шрифтов
- •Отображение на экране
- •1.3.1. Создание новых шрифтов
- •1.3.2. Функции для работы со шрифтами
- •Вопрос 2. Обработка сообщений от мыши и клавиатуры. Понятие фокуса ввода.
- •2.1. Клавиатурные сообщения
- •2.2. Параметры клавиатурных сообщений
- •2. Клавиатура
- •2.3. Символьные клавиатурные сообщения
- •3. Мышь
- •3.1. Сообщения, поступающие от мыши
3. Мышь
Мышь — это устройство ввода информации с одной или более кнопками. Win32 API поддерживает однокнопочную, двухкнопочную или трехкнопочную мышь, а также мышь с колесиком. Наличие мыши можно определить при помощи функции GetSystemMetrics:
fMouse = GetSystemMetrics (SM_MOUSEPRESENT);
Если мышь установлена, то значение fMouse будет равно TRUE. Количество кнопок у мыши определяется следующим вызовом:
cButtons = GetSystemMetrics (SM_CMOUSEBUTTONS);
Если мышь не установлена, то функция вернет нулевое значение.
Наличие мыши с колесиком можно определить при помощи вызова все той же функции GetSystemMetrics:
fMouseWheel = GetSystemMetrics(SM_MOUSEWHEELPRESENT);
Функция возвращает значение TRUE, если у мыши есть колесо.
Когда пользователь перемещает мышь, Windows передвигает по экрану небольшую растровую картинку, которая выступает в качестве курсора мыши (mouse cursor).
У курсора мыши есть горячая точка (hot spot) — пиксел, соответствующий положению курсора на экране. Когда говорят о позиции курсора мыши, то имеют в виду именно позицию горячей точки. Например, горячая точка стандартного курсора в виде стрелки (IDC_ARR0W) находится на кончике стрелки. Другой курсор, в виде перекрестья (IDC_CR0SS), имеет горячую точку в центре крестообразного шаблона.
Следует помнить, что курсор, используемый по умолчанию, для конкретного окна задается при определении структуры класса окна. Например, следующим оператором:
wc.hCursor = LoadCursor(NULL. IDC_ARR0W):
Действия пользователя с мышью принято описывать следующими терминами: Щелчок — нажатие и отпускание кнопки мыши.
Двойной щелчок — быстрое двойное нажатие и отпускание кнопки мыши.
Перетаскивание — перемещение мыши при нажатой кнопке.
Кнопки трехкнопочной мыши называются левой, средней и правой кнопками. В связанных с мышью идентификаторах, которые определены в заголовочных файлах Windows, используются аббревиатуры LBUTTON, MBUTT0N и RBUTT0N. На двухкнопочной мыши имеются только левая и правая кнопки. Единственная кнопка однокнопочной мыши является левой.
3.1. Сообщения, поступающие от мыши
Мышь может порождать много сообщений, всего их 22! Однако большинство из них вы можете благополучно проигнорировать, передав эти сообщения "всеядной" функции DefWindowProc. Сообщения, поступающие от мыши, содержат информацию о текущем расположении курсора, о его расположении в момент, когда вы нажимаете на клавиши мыши, и другую аналогичную информацию.
Существует два режима, определяющих два способа распределения сообщений от мыши.
В первом режиме, который установлен по умолчанию, сообщения от мыши направляются функции окна, расположенного под курсором мыши. Если в главном окне приложения создано дочернее окно и курсор мыши располагается над дочерним окном, сообщения мыши попадут в функцию дочернего окна, но не в функцию главного окна приложения. Это же касается и временных (pop-up) окон.
Во втором режиме окно может захватить мышь для монопольного использования. В этом случае функция этого окна будет всегда получать все сообщения мыши, независимо от расположения курсора мыши. Для того чтобы захватить мышь, приложение должно вызвать функцию SetCapture:
HWND WINAPI SetCapture(HWND hwnd);
Параметр hwnd функции указывает идентификатор окна, которое будет получать все сообщения от мыши вне зависимости от расположения курсора.
Функция SetCapture возвращает идентификатор окна, которое захватывало мышь до вызова функции или NULL, если такого окна не было.
Функция ReleaseCapture возвращает нормальный режим обработки сообщений мыши:
void WINAPI ReleaseCapture(void);
Эта функция не имеет параметров и не возвращает никакого значения.
Функция GetCapture позволяет определить идентификатор окна, захватившего мышь:
HWND WINAPI GetCapture(void);
Если ни одно окно не захватывало мышь, эта функция возвратит значение NULL.
В любом случае на получение сообщений от мыши никак не влияет факт приобретения или потери окном фокуса ввода.
Для всех этих сообщений значение параметра IParam содержит положение мыши. При этом в младшем слове находится значение координаты х, а в старшем слове — значение координаты у. Отсчет координат ведется от левого верхнего угла клиентской области окна. Эти значения можно извлечь из IParam при помощи макросов L0W0RD и HIWORD.
Два последовательных щелчка воспринимаются системой как двойной щелчок, если они происходят в течение достаточно короткого промежутка времени. Пользователь может самостоятельно задать этот интервал при помощи системного приложения Мышь (Mouse), которое можно найти в группе Панель управления.
Следует особо подчеркнуть, что окно будет получать сообщения о двойном щелчке (DBLCLK) только в том случае, если стиль соответствующего класса окна содержит флаг CS_DBLCLKS. Поэтому перед регистрацией класса окна нужно присвоить полю style структуры WNDCLASS значение, включающее этот флаг. Впрочем, если используется объект класса KWnd, то следует модифицировать стиль класса окна вызовом следующих инструкций:
style = GetClassLong(hWnd. GCL_STYLE); SetClassLong(hWnd, GCL_STYLE. style | CS_DBLCLKS):
Если класс окна определен без флага CS_DBLCLKS и пользователь делает двойной щелчок левой кнопкой мыши, то оконная процедура последовательно получает сообщения WMJ.BUTT0ND0WN, WM_LBUTTONUP, WM_LBUTT0ND0WN и WM_LBUTTONUP.
Если класс окна определен с флагом CS_DBLCLKS, то после двойного щелчка оконная процедура получит сообщения WM_LBUTT0ND0WN, WM_LBUTTONUP, WM_ LBUTTON-DBLCLK и WM_LBUTTONUP. Легко заметить, что в этом случае второе сообщение WM_LBUTT0ND0WN заменяется сообщением WM_LBUTTONDBLCLK.
Таблица 2 - Сообщения, поступающие от мыши
|
Сообщение |
Описание |
|
WM_LBUTTONDBLCLK |
Двойной щелчок левой клавишей мыши во внутренней (client) области окна |
|
WM_LBUTTONDOWN |
Нажата левая клавиша мыши во внутренней области окна |
|
WM_LBUTTONUP |
Отпущена левая клавиша мыши во внутренней области окна |
|
WM_MBUTTONDBLCLK |
Двойной щелчок средней клавишей мыши во внутренней области окна |
|
WM_MBUTTONDOWN |
Нажата средняя клавиша мыши во внутренней области окна |
|
WM_MBUTTOMUP |
Отпущена средняя клавиша мыши во внутренней области окна |
|
WM_MOUSEMOVE |
Перемещение курсора мыши во внутренней области окна |
|
WM_RBUTTONDBLCLK |
Двойной щелчок правой клавишей мыши во внутренней области окна |
|
WM_RBUTTONDOWN |
Нажата правая клавиша мыши во внутренней области окна |
|
WM_RBUTTONUP |
Отпущена правая клавиша мыши во внутренней области окна |
|
WM_NCHITTEST |
Перемещение мыши в любом месте экрана |
|
WM_MOUSEACTIVE |
Нажата клавиша мыши над неактивным окном |
|
WM_NCLBUTTONDBLCLK |
Двойной щелчок левой клавишей мыши во внешней (non-client) области окна |
|
WM_NCLBUTTONDOWN |
Нажата левая клавиша мыши во внешней области окна |
|
WM_NCLBUTTONUP |
Отпущена левая клавиша мыши во внешней области окна |
|
WM_NCMBUTTONDBLCLK |
Двойной щелчок средней клавишей мыши во внешней области окна |
|
WM_NCMBUTTONDOWN |
Нажата средняя клавиша мыши во внешней области окна |
|
WM_NCMBUTTOMUP |
Отпущена средняя клавиша мыши во внешней области окна |
|
WM_NCMOUSEMOVE |
Перемещение курсора мыши во внешней области окна |
|
WM_NCRBUTTONDBLCLK |
Двойной щелчок правой клавишей мыши во внешней области окна |
|
WM_NCRBUTTONDOWN |
Нажата правая клавиша мыши во внешней области окна |
Список использованных источников
Win 32-эфффективная разработка приложений [Электронный ресурс] : http://efrazrabotka.ru/category/
Википедия [Электронный ресурс] : http://ru.wikipedia.org
Всё для программирования [Электронный ресурс] : http://club.shelek.ru/view.php?id=11&startpoint=15
Ковтун В. Управление процессами, потоками и памятью в ОС Windows / В. Ковтун. Часть 2. Лекция. – 2010 [Электронный ресурс] : http://www.nrjetix.com/fileadmin/doc/publications/Lectures/Lecture11-2.pdf
Коньков К. А. Основы организации операционных систем Microsoft Windows / К. А. Коньков [Электронный ресурс] : http://www.intuit.ru/department/os/osmswin/9/3.html
Операционные системы. Электронный учебник [Электронный ресурс] : http://avinout.com
Операционные системы. [Электронный ресурс] : http://www.ist.ugtu.net/Methods/OS/contex.html
Рихнер Дж. Windows. Создание эффективных Win32-приложений с учётом специфики 64-разрядной версии Windows / Дж. Рихнер. – Изд. 4. – СПб.: Питер; М.: Русская Редакция. – 2008. – 720 с.: ил.
ТаненбаумЭ. Современные операционные системы /Э. Таненбаум. — СПб.: Питер, 2005. — 1038 с.: ил. ISBN 5-318-00299-4
ТаненбаумЭ. Операционные системы: Разработка и реализация / Э.Таненбаум, А.Вудхалл. — СПб.: 2006. — ISBN 5-469-00148-2
Фролов А. Операционная система Microsoft Windows 3.1 для программиста / А. Фролов, Г. Фролов. - Том 11, М.: Диалог-МИФИ, 1993 [Электронный ресурс] : http://frolov-lib.ru/books/bsp/v11/ch5.htm
