Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСиСП. Часть 2. Контрольная работа 1.doc
Скачиваний:
43
Добавлен:
01.04.2014
Размер:
202 Кб
Скачать
☆

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

Нажата правая клавиша мыши во внешней области окна

Список использованных источников

  1. Win 32-эфффективная разработка приложений [Электронный ресурс] : http://efrazrabotka.ru/category/

  2. Википедия [Электронный ресурс] : http://ru.wikipedia.org

  3. Всё для программирования [Электронный ресурс] : http://club.shelek.ru/view.php?id=11&startpoint=15

  4. Ковтун В. Управление процессами, потоками и памятью в ОС Windows / В. Ковтун. Часть 2. Лекция. – 2010 [Электронный ресурс] : http://www.nrjetix.com/fileadmin/doc/publications/Lectures/Lecture11-2.pdf

  5. Коньков К. А. Основы организации операционных систем Microsoft Windows / К. А. Коньков [Электронный ресурс] : http://www.intuit.ru/department/os/osmswin/9/3.html

  6. Операционные системы. Электронный учебник [Электронный ресурс] : http://avinout.com

  7. Операционные системы. [Электронный ресурс] : http://www.ist.ugtu.net/Methods/OS/contex.html

  8. Рихнер Дж. Windows. Создание эффективных Win32-приложений с учётом специфики 64-разрядной версии Windows / Дж. Рихнер. – Изд. 4. – СПб.: Питер; М.: Русская Редакция. – 2008. – 720 с.: ил.

  9. ТаненбаумЭ. Современные операционные системы /Э. Таненбаум. — СПб.: Питер, 2005. — 1038 с.: ил. ISBN 5-318-00299-4

  10. ТаненбаумЭ. Операционные системы: Разработка и реализация / Э.Таненбаум, А.Вудхалл. — СПб.: 2006. — ISBN 5-469-00148-2

  11. Фролов А. Операционная система Microsoft Windows 3.1 для программиста / А. Фролов, Г. Фролов. - Том 11, М.: Диалог-МИФИ, 1993 [Электронный ресурс] : http://frolov-lib.ru/books/bsp/v11/ch5.htm

25