![]() |
|
|
![]()
|
|
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Есть статик, курсор над которым в определённый момент не должен отображаться. Этот момент - нажатая правая клавиша мыши.
На момент, когда кнопка нажимается я выполняю ShowCursor(0), а когда "отжимается" ShowCursor(1). Первый раз всё выполняется правильно и мышь не отображается, а потом отображается, но когда я пытаюсь делать это повторно - она не исчезает. Вопрос: есть ли более грамотный способ не отображать мышь и что это за странное поведение с функцией ShowCursor() ? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
+ к этому, если я "отжимаю" кнопку мыши вне зоны статика - то, есесно, курсор продолжает быть невидимым, но когда я возвращаюсь на статик и нажимаю, а потом отжимаю (уже на нём) - то курсор всё равно не видно, хотя ShowCursor(0) - отрабатывает.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Попробуй обрабатывать сообщение WM_MOUSEMOVE.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Чтобы все работало корректно, недостаточно отслеживать перемещение мыши: нужно еще обрабатывать ее выход за пределы родительского окна.
Перемещение лучше отслеживать с помощью WM_SETCURSOR, а не WM_MOUSEMOVE. А выход за пределы окна - проверка по таймеру. При этом, нужно отслеживать сколько раз курсор был погашен - ровно столько раз его нужно будет включить, чтобы он появился. Или использовать значение, возвращаемое ShowCursor -------------------- ... |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Earnest, зачем? Курсор мы прячем (и держим спрятаным) в OnMouseMove если только он лежит на статике и нажата правая кнопка. Как только курсор покидает статик, мы его сразу показываем. Т.е. вне статика он всегда видим. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Курсор не исчезает в том случае, если отключение отображения происходит достаточно быстро: тупо кликал много раз.
После этого ShowCursor возвращает (-1) - что означает, что мышь не установлена, как указано в msdn. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
покажи код
|
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
||||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Я написал по памяти. Код именно такой, ни символом больше. А почему работать не будет?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
||||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
voov, читай мои посты внимательно: если быстро нажимать - то механизм ломается.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А как ты узнаешь, что курсор ушел со статика? Думаешь, статик получит маус-мув? Даже если делать это на уровне родительского окна, маус-мув придет только если курсор в его пределах. Всегда можно достаточно быстро дернуть мышь, так что никакй маус-мув не проскочит - ненадежно это. -------------------- ... |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Earnest, можно ограничить движение курсора ClipCursor функция. Но это оффтопик, господа.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Rickert, ты же показал только код, где прячется курсор, а где снова отображается - нет. Могу предположить, что по OnLButtonDown ты его отображаешь. В таком случае, если быстро клацать, то какието события могут неуспеть обработаться и как следствие поведение курсора будет не таким как нужно.
Чтобы этого избежать нужно делать проверки. Перед тем как прятать проверить, что курсор отображается. А перед тем как показать проверить, что он спрятан. Earnest, маус-мув обрабатывать на уровне родительского окна. Тогда в пределах этого окна все работает правильно. Если курсор выходит за пределы родительского окна, то он будет отображаться даже, если он был спрятан на статике и родительское окно не успело его показать. Проверял, правда только на модальных окнах. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |