Панельное
еофтостроишельспзво
| р г
ИванГАВРИЛЮК
Продолжение, см. начало в М К , № 44, 47, 51 (319, 322, 326)
Мышь
М
ышь для пользователя Windows по прову является важ-
нейшим устройством вводо, без которого робототь с
системой практически невозможно. Наличие мыши в
системе можно определить при помощи функции
G e t -
S y s te m M e tri.e s ,
передов ей в качестве параметра констан-
ту
s m _ m o u s e p r e s e n t .
Она возврощоет зночение, отличное
от нулевого, если мышь присутствует.
Мышь занимает особое место среди устройств вводо, ее
драйвер может генерировоть 35
сообщений
W in-
dows 2000) — в отличие, например, от кловиотуры, где их
всего 4 (не считая сообщений высокого уровня). В более но-
вых версиях Windows появились дополнительные сообщения,
поддерживающие мышь M icro so ft IntelliM ouse — например,
w m m o u s e w h e e l ,
отвєчоющєє за вращение колесика мыши.
В Windows 3.1 было 22 мышиных сообщения.
Мышь может находиться в двух режимох, определяющих
способ поступления сообщений окну приложения По умол-
чанию сообщения от мыши поступают тому окну, которое в
данный момент находится под ее курсором. Во втором ре-
жиме окно может захватить мышь для монопольного исполь-
зования, и все сообщения будут поступать только ему, неза-
висимо от того, где ноходится курсор мыши. Этот режим ус-
танавливается очень просто, достаточно вызвать функцию
HWND W IN A P I S e tC a p tu re { H W N D hW nd)
;, передав ей
HWND
О К-
Н О ,
которое будет получать сообщения от мыши. Для отме-
ны этого режима следует вызвать функцию
v o id w i n a p i R e -
le a s e C a p t u r e
( ) ;. Также есть полезная функция
h w n d w i n a p i
Ge t C a p t u r e ( v o id )
;, позволяющая узнать
h w n d
о кн о ,
захва-
тившего мышь. Если ни одно окно не захвачено, оно возвра-
щает
N U LL.
Большое количество сообщений мыши получаются как чо-
стный случай сообщения
w m_ n c h i t t e s t .
О но генерируется
драйвером мыши при любых ее перемещениях и нажатиях
кнопок. Конечно, драйвер не отслеживает положение кур
сора для каждого пикселя экрана, частота появления этого
сообщения зависит от скорости перемещения мыши, поро-
метров драйвера и т.п. Через парометр
I P a ra m
вместе с со-
общением поступоют координаты курсора. В младшем сло-
ве находится х-координата, в старшем — у. В программном
интерфейсе Windows имеются два макросо, позволяющие
извлечь координаты из
w Param :
x P o s = G E T „X _ L P A R A M (IP a ra m );
y P o s = G E T _ Y _ L P A R A M (IP a ra m );
Обычно приложениям нет надобности обрабатывать это
сообщение, и оно обработывоется функцией
D e fw in d o w -
Р г о с ( ) .
Получив сообщение
WM N C H IT T E S T ,
функция
D e -
fw in d o w P r o c
() определяет положение курсора мыши отно-
сительно других объектов в окне и возвращоет специфиче-
ское значение. Например, если курсор мыши находится над
заголовком окно, оно возвращает значение
h t c a p t i o n ,
и
т .д .
Полный список значений с префиксом нт я приводить не бу-
ду, их много (около 26), желающие могут посмотреть в до-
Л
ТА Б ЛИ Ц А 1
Сообщение
Описание
WMJ.BUTTONUP
Сообщение возникоет при отпускании левой кнопки мыши
WMLBUTTONDOW N
Сообщение возникает при нажатии левой кнопки мыши
WM_RB LITTON UP
I Сообщение возникает при отпусконии правой кнопки мыши
WM_RB LITTON DOW N
Сообщение возникоет при нажатии правой кнопки мыши
W M MOUSEMOVE
При перемещении курсора мыши во внутренней области окна
!не считая заголовок,гран и ц у )_____________________________
кументоции к P latform SDK, котороя входит в M SDN . После
обработки
wm_ n c h i t t e s t
Windows анализирует расположе-
ние курсоро и генерирует одно из сообщений более высо-
кого уровня. Минимум, который мы будем использовать, пред-
ставлен в таблице 1.
r^j ТАБЛИЦА
2
Битовая константа
Описоние
MK_CONTROL
На клавиатуре нажата клавиша Ctrl
MK_LBUTTON
Левая клавиша мыши
MK_RBUTTON
Правая клавиша мыши
MK_MBUTTON
Средняя клавиша мыши
MK_SHIFT
Клавиши Shift на клавиатуре
Внутренней областью окна считоется окно без зоголовка
и толстой рамки. Сообщения для внутренней облости окна
генерируются, если
D e fw in d o w P ro c ()
в ответ на сообще-
ние
W M _N CH ITTEST
возвращает
H T C L IE N T .
При этом
IP a ra m ,
кок и раньше, содержит координаты курсора мыши, а
w P a ra m
является совокупностью битовых флотов, зночения которых
перечислены в таблице 2.
Обратите внимоние, что когда мы роботапи с клавиату-
рой, мы были уверены, что поро сообщений
W M K E YDOWN/
w m_ k e y u p
поступит в одно и то же окно. В случае с мышью
это не всегда верно. Вы можете нажать клавишу мыши, ко-
гда курсор находится над одним окном, и оно получит сооб-
щение
wm_ l b u t t o n d o w n / w m_ r b u t t o n d o w n ,
а отпустить — над
другим окном, и оно получит
W M _LBUTTONUP/W M _RBUTTONUP.
Это следует учитывать в прогроммох, ток как одного из со-
общений вы можете просто никогдо не дождаться, и про-
громмо будет работать непровильно.
Теперь поговорим о двойных щелчкох мыши. Windows мо-
жет автоматически роспозновать такие щелчки и заменять
их соответствующими сообщениями. Вспомните, когда мы пи-
сали оконное приложение, одним из подготовительных дей-
ствий перед выводом окно была его регистрация функцией
R e g is t e r C la s s .
Ном нужно было подготовить специальную
структуру
w n d c l a s s
и передоть ее адрес этой функции. Па-
раметр
s t y l e
этой структуры отвечол за стиль класса и за-
давался комбинацией стилей клосса. Если к этой комбина-
ции добовить стиль
c s _ d b l c l k s ,
то Windows будет распо-
знавать двойные щелчки мышью для всех окон, созданных на
бозе донного класса. То есть последовательность сообще-
ний
W M_LBUTTONDOW N-W MJLBUTTONUP - WM_LBUTTONDOWN-WM_
l b u t t o n u p
не поступит в очередь сообщений, вместо
ЭТОГО
поступит всего
ОДНО
сообщение —
W M _LBUTTO ND BLCLK.
Со-
ОТВЄТСТВЄННО,
вместо
WM RBUTTONDOWN-WM RBU TTO N U P- WM_
RBUTTONDOW N-WM RBUTTO NUP
поступит
W M R B U T T O N D B LC LK .
Конечно, это будет происходить в том случае, если интервол
между щелчкоми не будет превышоть установленного в сис-
теме (который настраивается в апплете «Мышь» панели управ-
ления).
Еще одно свойство мыши, которое можно изменять, это
курсор. Кождое окно может иметь свое изоброжение курсо-
ро, которое определяется при регистрации классо (см.
R e g -
is t e r C la s s )
в параметре
h C u r s o r .
Для зогрузки курсоро
используется АРЛфункция
L o a d C u r s o r ( )
, в кочестве пара-
метров ей нужно передать
h ln s t a n c e
приложения, из ре-
сурсов которого загружается курсор, и константу, иденти-
фицирующую курсор. Наше приложение пока не имеет ре-
сурсов Можно токже использовоть один из стандартных кур-
№ 1-2/328-329 03 января-17 января 2005
предыдущая страница 39 Мой Компьютер 2005 01-02 читать онлайн следующая страница 41 Мой Компьютер 2005 01-02 читать онлайн Домой Выключить/включить текст