Обработка извещений
Когда пользователь перемещает движок органа управления Trackbar, родительское окно получает извещения в форме сообщения WM_HSCROLL (или WM_VSCROLL для горизонтального расположения). Эти извещения аналогичны извещениям, поступающим от полосы просмотра Scrollbar.
Младшее слово параметра wParam сообщения WM_HSCROLL может содержать один из следующих кодов извещения:
Код извещения | Описание |
TB_PAGEUP | Извещение поступает, когда пользователь сделал щелчок мышью по полосе Trackbar слева или сверху от движка, либо нажал клавишу с кодом VK_PRIOR (клавишу <PgUp>) |
TB_PAGEDOWN | Пользователь сделал щелчок справа или снизу от движка, либо нажал клавишу с кодом VK_NEXT (клавишу <PgDn>) |
TB_LINEUP | Была нажата клавиша с кодом VK_LEFT или VK_UP (клавиша перемещения курсора влево или вверх) |
TB_LINEDOWN | Была нажата клавиша с кодом VK_RIGHT или VK_DOWN (клавиша перемещения курсора вправо или вниз) |
TB_TOP | Пользователь нажал клавишу с кодом VK_HOME (клавишу <Home>) |
TB_BOTTOM | Пользователь нажал клавишу с кодом VK_END (клавишу <End>) |
TB_THUMBPOSITION | Это извещение приходит, когда пользователь переместил мышью движок в новое положение |
TB_THUMBTRACK | Извещение TB_THUMBTRACK приходит в процессе перемещения движка |
TB_ENDTRACK | Извещение приходит после завершения перемещения движка мышью или отпускания клавиши, с помощью которой перемещался движок |
Ниже мы привели функцию DlgProc_OnHScroll из приложения Compact Disk Player, обрабатывающую извещения от органа управления Trackbar:
void DlgProc_OnHScroll(HWND hdlg, HWND hwndCtl, UINT code, int pos) { switch(code) { case TB_LINEDOWN: case TB_PAGEDOWN: CdPlayNext(hdlg); break; case TB_LINEUP: case TB_PAGEUP: CdPlayPrev(hdlg); break; case TB_BOTTOM: CdPlay(hdlg, nTrackCnt); break; case TB_TOP: CdPlay(hdlg, 1); break; case TB_THUMBPOSITION: CdPlay(hdlg, pos); break; default: break; } }
Как видите, здесь все очень просто.
Функции DlgProc_OnHScroll передаются преобразованные параметры сообщения WM_HSCROLL. Код извещения находится в параметре code, а новое значение позиции (которое нужно для обработки извещения TB_THUMBPOSITION) - в параметре pos.