‘i&S&Sr
соров Windows. Для этого
в
качестве
h ln s t a n c e
следует пе-
редать
n u l l ,
а
в
качестве константы можно выбрать одну из
представленных в таблице 3.
ТАБЛИЦА 3
IDCAPPSTARTING
Стандартная стрелка с песочными часами
IDC_ARROW
IDC_CROSS
Стандартная стрелка
Курсор в виде крестика
ID C HAN D
IDC_HELP
Курсор в виде руки
Знак вопроса
IDCJBEAM
1-Веат
IDCJCON
Не используется,оставлено для совместимости
{
со старыми версиями Wiпdows.
IDC_NO
IDC_SIZE
Перечеркнутый круг
Тоже,чтаи
ЮС_8СЕА!±,новые приложения не
должны его использовать
IDC_SIZEALL
IDC_SIZENESW
IDC SIZENS
Стрелки,покозывоющие в четыре стороны
Изменение размеров окно
Изменение размеров окно
IDC_SIZENWSE
IDCSIZEWE
IDCUPARROW
DCW AIT
Изменение размеров окно
Изменение размеров окна
Вертикальная стрелка
Песочные часы
Также курсор можно динамически изменить, к примеру, в
ответ на какое-либо сообщение. Для этого существует функ-
ция
HCURSOR W IN A P I S e t C u r s o r ( HCURSOR h e u r
) ;. В кочест
ве единственного параметра ей следует передать идентифи-
катор курсора, а возвращает она идентификатор предыду-
щего курсора. Например, чтобы изменить курсор на песоч-
ные часы, можно нописать так:
HCURSOR h C u r s o r , h P r e v C u r s o r ; //и д е н т и ф и к а т о р ы к у р -
с о р о в
h C u r s o r = L o a d C u r s o r ( N U L L ,I D C _ W A I T ) ; / / з а г р у ж а е м
к у р с о р
h P r e v C u r s o r = S e t C u r s o r ( h C u r s o r ) ; / / у с т а н а в л и в а е м ,
с о х р а н я я с т а р ы й в h P r e v C u r s o r
Чтобы восстановить старый курсор, просто напишите:
S e t C u r s o r ( h P r e v C u r s o r ) ;
Среди прочих полезных /4Р/-функций Windows для рабо-
ты с мышью можно.-выделить функции, представленные в таб-
лице 4.
i
1 ТАБЛИЦА 4
void W INAPI SetCursorPos(intx,mty)
void W INAP) GetCursorPos(POtNT FAR* Ippt),
void W iN AP I ClipCursor(consf RECT FAR* Iprc),
void W INAPI GetCIi pCursor(RECT FAR* Iprc),
Установко курсора мыши в новое положение (х, у)
Позволяет узнать текущее положение курсора мыши
из любого место программы В качестве параметра
передается одрес но структуру PO INT в которую
функция записывает координаты.
Позволяет ограничить область перемещения курсора
областью, заданной в структуре RECT
Позволяет узнать текущую установленную область
ограничения Есди ее нет,то возвращается весь
экран (еще один способ узнать разрешение экрана)
Вот, собственно, и все. Для закрепления знаний напишем
простое приложение, позволяющее рисовоть линии в окне с
помощью мыши. Я привожу только текст функции
W n d P ro c,
т.к. остальной код аналогичен предыдущему примеру за ис-
ключением одной строки. При зополнении структуры
WND-
C L A S S
замените строку
WC
. s t y l e = 0 ; НО
WC
. s t y l e = C S _ H R E -
d r a w I c s _ v r e d r a w I c s _ d b l c l k s .
Этим сомым мы заставля-
ем окно перерисовываться при изменении вертикальных или
горизонтальных размеров и роспозновать двойные щелчки.
Полный текст прогроммы и сому программу можно всегдо
СКОЧОТЬ ИЗ
Интернета
ПО
адресу:
http://w w w .ivgv.narod.ru/
artides/w in32api/sources/ mouse 1 .zip
L R E S U L T C A L L B A C K
W n d P ro c (H W N D hw nd, U IN T m s g , WPARAM w P a ra m , LPAR AM
IP a ra m )
{
P A IN T S T R U C T p s ;
HDC h D C ;
s t a t i c i n t s t a r t x , s t a r t y , o ld x , o ld y ;
s t a t i c b o o l is T r a c k in g ;
s w it c h (m sg)
{
c a s e W M _CREATE :
is T r a c k i n g = f a l s e ;
b r e a k ;
c a s e W M _D ESTRO Y:
P o s t Q u it M e s s a g e ( 0 ) ;
b r e a k ;
c a s e WM_LBUTTONDOWN:
s t a r t x = o l d x = G E T _ X _ L P A R A M ( I P a r a m ) ;
s t a r t y = o l d y = G ET _Y L P A R A M ( I P a r a m ) ;
is T r a c k i n g = t r u e ;
S e t C a p t u r e ( h w n d ) ;
b r e a k ;
c a s e W M _LBUTTO NUP:
R e le a s e C a p t u r e ( ) ;
is T r a c k i n g = f a l s e ;
b r e a k ;
c a s e W M _LBU TTO N D BLC LK :
M e s s a g e B o x (h w n d , "Д в о й н о й щ е л ч о к л е в о й к л а в и ш е й
м ы ш и ", "М ы ш ь",
МВ_ ОК | M B _IC O N IN FO R M A T IO N ) ;
b r e a k ;
c a s e W M _RBU TTO N D BLCLK:
M e s s a g e B o x (h w n d , "Д в о й н о й щ е л ч о к п р а в о й к л а в и ш е й
мыши ' , "М ы ш ь ",
М В_ОК I M B _ IC O N IN F O R M A T IO N );
b r e a k ;
c a s e W M_MOUSEMOVE:
i f ( i s T r a c k i n g )
(
hD C = G e tD C ( h w n d ) ;
S e tR 0 P 2 (h D C , R 2 _ .N 0 T );
M o v e T o E x (h D C , s t a r t x , s t a r t y , N U L L ) ;
L in e T o ( h D C , o l d x , o ld y ) ;
M o v e T o E x (h D C , s t a r t x , s t a r t y , N U L L ) ;
L in e T o ( h D C , o l d x = G E T _ X _ L P A R A M (IP a ra m ), o ld y =
G E T _ Y _ L P A R A M (IP a ra m )) ;
R e le a s e D C ( h w n d , h D C ) ;
)
b r e a k ;
d e f a u l t ;
r e t u r n D e fW in d o w P ro c (h w n d , m sg , w P a ra m , I P a r a m ) ;
>
A. >
Когда ножимается левоя клавиша мыши, в поре
( s t a r t x ,
s t a r t y )
сохраняются координоты мыши, переменную
i s -
T r a c k in g
установливоем в
t r u e ,
она отвечает за режим
слежения зо линией. Захватываем мышь, чтобы при отпус-
кании пользователем клавиши над другим окном получить
сообщение
w m _ l b u t t o n u p
в нашем окне. Поко пользова-
тель держит левую кнопку, переменная
is T r a c k i n g
рав-
на
t r u e .
Когда пользователь перемещает мышь, посыло-
ется сообщение
w m_ m o u s e m o v e .
Если нажата левая клави-
ша, отрисовываем линию. Здесь встречается неизвестноя
вам функция из G D I A P I
S e tR 0 P 2 ( )
. О на устанавливает
режим отображения пикселей. Режим
R 2 _ n o t
рисует пик-
сель цветом, противоположным подложке. Т.е. если нари-
совать линию два раза в этом режиме, то при второй про-
рисовке она полностью затрется. Мы используем это свой-
ство для затирания предыдущей линии. При отпускании ле-
вой кнопки
(w m_ l b u t t o n u p )
отпускаем мышь и устанавли-
ваем
i s T r a c k i n g
в
f a l s e ,
отменяя режим слежения. По-
лучается что-то вроде инструмента «линия» в стандартном
редокторе изоброжений Point. Чтобы проверить, что про-
грамма действительно распознает двойные щелчки мышей,
мы переопределили соответствующие обработчики собы-
тий. Уберите стиль
c s d b l c l k s ,
перекомпилируйте про-
грамму и убедитесь, что без него двойные щелчки будут
восприниматься как одинарные. Можете поэксперименти-
ровать, убрав вызовы функций
S e t C a p t u r e / R e le a s e C a p -
t u r e .
Можно еще добовить функцию перемещения курсо-
ро мыши с помощью клавиш клавиатуры, перехвотив со-
общение кловиотуры
WM_KEYDOW N,
К О К ЭТО
было
П О К О З О Н О
в предыдущем примере, и т.п.
Компилируется программа из командной строки:
c l m o u s e l. с р р u s e r 3 2 . l i b g d i3 2 . l i b
(Продолжение следует)
предыдущая страница 40 Мой Компьютер 2005 01-02 читать онлайн следующая страница 42 Мой Компьютер 2005 01-02 читать онлайн Домой Выключить/включить текст