Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2007-12-22 21:18:21 ЛС | профиль | цитата
Скажем так: в том примере возникает "конфликт" двух функций, меняющих положение ползунка: во-первых, это действия пользователя, а во-вторых - автоматическое изменение положения по мере проигрывания файла. Если бы я столкнулся с такой проблемой при написании программы, то я бы при поступлении события WM_HSCROLL с SB_THUMBTRACK установил бы флаг "Ползунок не тронь!", и проверял его перед установкой позиции. А при поступлении WM_HSCROLL с SB_ENDSCROLL - снимал бы этот флаг.

Да, и кстати, "правильные пацаны" используют GetScrollInfo для определения позиции ползунка Ибо сказано:
"MSDN:WM_HSCROLL" писал(а):
Note that the WM_HSCROLL message carries only 16 bits of scroll box position data. Thus, applications that rely solely on WM_HSCROLL (and WM_VSCROLL) for scroll position data have a practical maximum position value of 65,535.

------------ Дoбавленo:

Чуть более общий сценарий: вообще всегда при поступлении WM_xSCROLL ставим сий флаг, а снимаем его:

  • По окончании обработки, если он не был до входа в процедуру выставлен и если LOWORD(Msg.wParam) не равен SB_THUMBTRACK
  • Если LOWORD(Msg.wParam) равен SB_ENDSCROLL или SB_THUMBPOSITION.

А в данном конкретном примере нам надо обеспечить посылку onPosition до того, как мы в очередной раз программно подвинем ScrollBar.

карма: 1

0