Шаг 356 - CWnd::OnHScroll

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);
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.