Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CSliderCtrl. Как отловить скролл слайдера клавишей 
V
    Опции темы
voov
Дата 17.6.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Есть CSliderCtrl. 
Если слайдер был передвинут мышкой, то новое значение смотрим в обработчике NM_RELEASEDCAPTURE (в момент, когда мышка отпустила слайдер). Во время перемещения смотрим в обработчике OnHScroll.

А как или где смотреть новое значение слайдера, если он был прокручен стрелкой клавиатуры?
PM MAIL   Вверх
Andrey44
Дата 18.6.2008, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Лови в PreTranslateMessage().
 smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
voov
Дата 18.6.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А что ловить-то надо?
PM MAIL   Вверх
Earnest
Дата 18.6.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



WM_HSCROLL или WM_VSCROLL, в зависимости от ориентации полунка. И не обязательно через PreTranslate, логичнее обработчик написать. А NM_RELEASEDCAPTURE забудь, из WM_HSCROLL получишь инфо о прокрутке в более удобном виде.

Добавлено через 1 минуту и 29 секунд
Собственно, у тебя уже есть обработчик OnHScroll - оно всегда и приходит.


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


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


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

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



Да как раз OnHScroll и не подходит... 

OnHScroll я исползую чтобы в эдите отобразить текущее значение скрола в момент перемещения. 
А в момент завершения перемещения должно выполняться определенное действие, причем это действие довольно ресурсоёмкое. Если это действие выполнять в OnHScroll, то приложение начинает тормозить, что не хорошо.

Поэтому я выполняю его в момент окончания перемещения.

Если слайдер перемещался мышкой, то момент окончания перемещения ловлю в NM_RELEASEDCAPTURE.
Но не знаю где ловить момент окончания перемещения, если скрол производился с клавиатуры...

p.s. Теперь вроде понятнее выразил суть вопроса, что при создании темы как всегда неудалось...  smile 
PM MAIL   Вверх
Andrey44
Дата 19.6.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Сделай это в PreTranslateMessage()
Код

if(pMsg->hwnd==slider.GetSafeHwnd() && pMsg->message==WM_KEYUP && (pMsg->hParam==VK_DOWN || pMsg->hParam==VK_UP))//по-моему так
{
////////////////////////your code
}



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 19.6.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(voov @  18.6.2008,  14:52 Найти цитируемый пост)
 Если это действие выполнять в OnHScroll, то приложение начинает тормозить, что не хорошо.

А ты не каждый OnHScroll обрабатывай. Там же есть параметр code, который рассказывает, что именно произошло.
Не может быть, чтобы по клавиатурному скролу не приходил OnHScroll - если положение ползунка меняется, WM_HSCROLL обязан приходить.
Всю жизнь обходилась только WM_SCROLL, его достаточно для любых обработок, связанных с прокруткой.


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


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


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

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



Andrey44, спасибо, но то что предлагает Earnest проще. В OnHScroll действительно есть параметр UINT nSBCode, по нему можно определить какой это был скролл. Вон из мндн
Код

nSBCode
Specifies a scroll-bar code that indicates the users scrolling request. This parameter can be one of the following:

SB_LEFT   Scroll to far left.
SB_ENDSCROLL   End scroll.
SB_LINELEFT   Scroll left.
SB_LINERIGHT   Scroll right.
SB_PAGELEFT   Scroll one page left.
SB_PAGERIGHT   Scroll one page right.
SB_RIGHT   Scroll to far right.
SB_THUMBPOSITION   Scroll to absolute position. The current position is specified by the nPos parameter.
SB_THUMBTRACK   Drag scroll box to specified position. The current position is specified by the nPos parameter.

Даже не знаю, как я сам не обратил внимание на этот параметр...
Earnest, спасибо!!!
PM MAIL   Вверх
Andrey44
Дата 19.6.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



voov, да я и сам потом посмотрел в мсдн по-моему тебя интересовал SB_ENDSCROLL? smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
voov
Дата 19.6.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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


 




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


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

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