Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Указатель мыши за пределами ClientRect

9.7K
17 марта 2009 года
_Oleg_
43 / / 15.08.2006
Хочу поймать момент когда, указатель мыши покидает пределы клиентской области. Мне необходим этот момент, чтобы сменить значения некоторых переменных.

Использую пример отсюда
http://rsdn.ru/article/qna/ui/mouseout.xml

Способ 2
Демонстрационный проект MouseExEvent, с использованием таймера.

Но этот проект отказывается работать в VS 2008, а также в 7 версии.
(Выдает одну ошибку)


Посмотрите пожалуйста этот пример и если у Вас есть возможность адаптируйте его к VS 2008. Я не смог.
Большое спасибо.
9.7K
17 марта 2009 года
_Oleg_
43 / / 15.08.2006
Нашел грабли.
Может кому пригодится.
Несовпадение типов.
311
24 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: _Oleg_
Хочу поймать момент когда, указатель мыши покидает пределы клиентской области. Мне необходим этот момент, чтобы сменить значения некоторых переменных.


Это понятно. А остальное к чему?

9.7K
24 марта 2009 года
_Oleg_
43 / / 15.08.2006
plastictown

При движении мыши происходит отрисовка некоторых примитивов.
Геометрия примитивов зависит от значений переменных, которые, в свою очередь зависят от положения указателя мыши и положения полос прокрутки.
При выходе мыши за пределы клиентской области их отрисовка должна производится по другому.
Ко всему прочему ButtonDown|ButtonUp тоже работают только в клиентской области. Из этого также вытекали некоторые бока.
311
28 марта 2009 года
plastictown
309 / / 08.01.2006
Цитата: _Oleg_
Хочу поймать момент когда, указатель мыши покидает пределы клиентской области. Мне необходим этот момент, чтобы сменить значения некоторых переменных.



OnTimer:

Код:
[SIZE=2]CRect cr;[/SIZE]
[SIZE=2]GetClientRect(&cr);[/SIZE]
[SIZE=2]ClientToScreen(&cr);[/SIZE]
[SIZE=2]CPoint pnt;[/SIZE]
[SIZE=2]GetCursorPos(&pnt);[/SIZE]
 
[SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](cr.PtInRect(pnt)){[/SIZE]
[SIZE=2]//Курсор в клиентской области[/SIZE]
 
[SIZE=2]}[/SIZE][SIZE=2][COLOR=#0000ff]else[/COLOR][/SIZE][SIZE=2]{[/SIZE]
[SIZE=2]//Курсор вне клиентской области[/SIZE]
 
[SIZE=2]};[/SIZE]


[COLOR=dimgray]PS:[/COLOR] [COLOR=gray]Получил за это сообщение -5 баллов и отзыв "Учи матчасть". Возможно, что-то в нем не так.[/COLOR]
355
01 апреля 2009 года
<SCORP>
786 / / 21.10.2006
http://blogs.msdn.com/oldnewthing/archive/2003/10/13/55279.aspx
может ещё чем поможет
9.7K
02 апреля 2009 года
_Oleg_
43 / / 15.08.2006
plastictown, <SCORP>

Спасибо за помощь!

Сделал так.
Код:
CRect cr;
GetClientRect(&cr);
ClientToScreen(&cr);
CPoint pnt;
GetCursorPos(&pnt);
 
if(cr.PtInRect(pnt)){
//Курсор в клиентской области

}else{
//Курсор вне клиентской области

};


Работает намного стабильней и лучше чем в приведенном мной примере.
MouseExEvent2008.zip
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог