afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
Параметры
nSBCode
Определяет код слайдера, который указывает запроса пользователя на прокрутку. Этот параметр может быть один из следующего:
SB_LEFT Прокрутка к далеко в лево.
SB_ENDSCROLL Конечная прокрутка.
SB_LINELEFT Левая Прокрутка.
SB_LINERIGHT Листают право.
SB_PAGELEFT Листают в лево одну страницу.
SB_PAGERIGHT Листают одну страницу право.
SB_RIGHT Прокрутка далекое в право.
SB_THUMBPOSITION Прокрутка к абсолютной позиции. Текущая позиция определена nPos параметром.
SB_THUMBTRACK Перетаскивают бегунок к определенной позиции.
Текущая позиция определена nPos параметром.
nPos
Определяет позицию бегунка если код слайдера - SB_THUMBPOSITION или SB_THUMBTRACK, иначе не используеться. В зависимости от начального диапазона прокрутки, nPos может быть отрицателен и должен приводиться к int в случае необходимости.
pScrollBar
Если сообщение прокрутки исходило из элемента управления слайдера, содержит указатель на элемент управление. Если пользователь нажал слайдер окна, этот параметр NULL. Указатель может быть временный и не должен быть сохранен для более позднего использования.
Замечания
Рамка вызывает эту функцию, когда пользователь нажимает горизонтальный слайдер окна. SB_THUMBTRACK код слайдера обычно используется прикладными программами, которые дают некоторую обратную связь, в то время как бегунок перемещается. Если прикладная программа листает содержание управляемое слайдером, это должно также сбросить позицию бегунка с SetScrollPos функцией.
Эта функция вызвана рамкой, чтобы позволить Вашей прикладной программе обрабатывать сообщение Windows. Параметры, переданные к Вашей функции отражают параметры, полученные рамкой, когда сообщение было получено. Если Вы вызываете реализацию базового класса этой функции, та реализация использует параметры, первоначально переданные с сообщением и не параметры, которые Вы обеспечиваете функции.
Пример
void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// Получите минимальные и максимальные позиции слайдера.
int minpos;
int maxpos;
pScrollBar->GetScrollRange(&minpos, &maxpos);
maxpos = pScrollBar->GetScrollLimit();
// Получите текущую позицию бегунка.
int curpos = pScrollBar->GetScrollPos();
// Определите новую позицию бегунка.
switch (nSBCode)
{
case SB_LEFT: // Прокрутка далеко в лево.
curpos = minpos;
break;
case SB_RIGHT: // Прокрутка далеко в право.
curpos = maxpos;
break;
case SB_ENDSCROLL: // Конечная прокрутка.
break;
case SB_LINELEFT: // Левая Прокрутка.
if (curpos > minpos)
curpos--;
break;
case SB_LINERIGHT: // Правaя Прокруткa.
if (curpos < maxpos)
curpos++;
break;
case SB_PAGELEFT: // Листайте в лево на одну страницу.
{
// Получите размер страницы.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
}
break;
case SB_PAGERIGHT: //Листайте одну страницу в право.
{
// Получите размер страницы.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
}
break;
case SB_THUMBPOSITION: // Прокруткa к абсолютной позиции. nPos - позиция
curpos = nPos; // Из бегунка в конце перетащенной операции.
break;
case SB_THUMBTRACK: // Перетащите бегунок к определенной позиции. nPos -
curpos = nPos; // Позиция, к которой бегунок перемещен.
break;
}
// Установите новую позицию бегунка
pScrollBar->SetScrollPos(curpos);
CView::OnHScroll(nSBCode, nPos, pScrollBar);
}