Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не отображать курсор 
:(
    Опции темы
Rickert
Дата 14.7.2008, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Есть статик, курсор над которым в определённый момент не должен отображаться. Этот момент - нажатая правая клавиша мыши.
На момент, когда кнопка нажимается я выполняю ShowCursor(0), а когда "отжимается" ShowCursor(1).
Первый раз всё выполняется правильно и мышь не отображается, а потом отображается, но когда я пытаюсь делать это повторно - она не исчезает.
Вопрос: есть ли более грамотный способ не отображать мышь и что это за странное поведение с функцией ShowCursor() ?



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Rickert
Дата 14.7.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



+ к этому, если я "отжимаю" кнопку мыши вне зоны статика - то, есесно, курсор продолжает быть невидимым, но когда я возвращаюсь на статик и нажимаю, а потом отжимаю (уже на нём) - то курсор всё равно не видно, хотя ShowCursor(0) - отрабатывает. smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
voov
Дата 14.7.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Попробуй обрабатывать сообщение WM_MOUSEMOVE.
Код

ххх::OnMouseMove(UINT nFlags, CPoint point) {
    if (/*проверить что point лежит на статике*/ && nFlags & MK_RBUTTON)
           // спрятать курсор
    else 
           // показать курсор
}

PM MAIL   Вверх
Earnest
Дата 14.7.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Чтобы все работало корректно, недостаточно отслеживать перемещение мыши: нужно еще обрабатывать ее выход за пределы родительского окна.
Перемещение лучше отслеживать с помощью WM_SETCURSOR, а не WM_MOUSEMOVE. А выход за пределы окна - проверка по таймеру.
При этом, нужно отслеживать сколько раз курсор был погашен - ровно столько раз его нужно будет включить, чтобы он появился. Или использовать значение, возвращаемое ShowCursor



--------------------
...
PM   Вверх
voov
Дата 14.7.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(Earnest @  14.7.2008,  13:56 Найти цитируемый пост)
нужно еще обрабатывать ее выход за пределы родительского окна


Earnest, зачем? Курсор мы прячем (и держим спрятаным) в OnMouseMove если только он лежит на статике и нажата правая кнопка. Как только курсор покидает статик, мы его сразу показываем. Т.е. вне статика он всегда видим.
PM MAIL   Вверх
Rickert
Дата 15.7.2008, 05:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Курсор не исчезает в том случае, если отключение отображения происходит достаточно быстро: тупо кликал много раз.
После этого ShowCursor возвращает (-1) - что означает, что мышь не установлена, как указано в msdn.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
voov
Дата 15.7.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



покажи код
PM MAIL   Вверх
Rickert
Дата 16.7.2008, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Код

void aDialog::OnLButtonUp(...)
{
  ShowCursor(0);
}

 smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
voov
Дата 16.7.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



 smile и это все? тогда конечно не будет работать smile 

и причем тут левая кнопка? ты же сам писал

Цитата(Rickert @  14.7.2008,  08:07 Найти цитируемый пост)
Есть статик, курсор над которым в определённый момент не должен отображаться. Этот момент - нажатая правая клавиша мыши.

давай код где прячешь и показуешь курсор (только весь  smile )
PM MAIL   Вверх
Rickert
Дата 16.7.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Я написал по памяти. Код именно такой, ни символом больше. А почему работать не будет?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
voov
Дата 16.7.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(Rickert @  16.7.2008,  13:01 Найти цитируемый пост)
А почему работать не будет? 

я говорил о проблеме вцелом.

говоришь курсор не исчезает... у меня после ShowCursor(0); курсора прячется

Добавлено через 5 минут и 56 секунд
Возможно дело в том, что ShowCursor(0); вызывается больше 1 раза.

PM MAIL   Вверх
Rickert
Дата 16.7.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



voov, читай мои посты внимательно: если быстро нажимать - то механизм ломается.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Earnest
Дата 17.7.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(voov @  14.7.2008,  17:54 Найти цитируемый пост)
Курсор мы прячем (и держим спрятаным) в OnMouseMove если только он лежит на статике 

А как ты узнаешь, что курсор ушел со статика? Думаешь, статик получит маус-мув? Даже если делать это на уровне родительского окна, маус-мув придет только если курсор в его пределах. Всегда можно достаточно быстро дернуть мышь, так что никакй маус-мув не проскочит - ненадежно это.


--------------------
...
PM   Вверх
Rickert
Дата 17.7.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Earnest, можно ограничить движение курсора ClipCursor функция. Но это оффтопик, господа.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
voov
Дата 17.7.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Rickert, ты же показал только код, где прячется курсор, а где снова отображается - нет. Могу предположить, что по OnLButtonDown ты его отображаешь. В таком случае, если быстро клацать, то какието события могут неуспеть обработаться и как следствие поведение курсора будет не таким как нужно.
Чтобы этого избежать нужно делать проверки. Перед тем как прятать проверить, что курсор отображается. А перед тем как показать проверить, что он спрятан.

Earnest, маус-мув обрабатывать на уровне родительского окна. Тогда в пределах этого окна все работает правильно. Если курсор выходит за пределы родительского окна, то он будет отображаться даже, если он был спрятан на статике и родительское окно не успело его показать. Проверял, правда только на модальных окнах.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.