В общем, в операционной системе Windows существует два типа полос прокрутки. Элементы первого типа является частью окна (включая диалоговым окном). Их называют стандартными или оконными полосами прокрутки. Элементы второго типа существуют независимо и поэтому называются независимыми полосами прокрутки. Первые описываются в классе CWnd, вторые - с помощью класса CScrollBar. Для того, чтобы окно содержало стандартные полосы прокрутки необходимо вы-значить соответствующие стили.
CMainWin :: CMainWin ()
[Create (NULL, "Простая MFC-программа",
WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, rectDefault, NULL, MAKEINTRESOURCE (IDR_MENU1));]
Для диалоговых окон ситуация значительно проще: в свойствах сабля-на диалогового окна следует лишь отметить "Horizontal scroll", "Vertical Scroll".
Каждая макрокоманда имеет свой обработчик:
void CWnd :: OnVScroll (UINT nSBCode, UINT nPos, CScrollBar * pScrollBar);
void CWnd :: OnHScroll (UINT nSBCode, UINT nPos, CScrollBar * pScrollBar);
где nSBCode - код действия с полосой прокрутки, nPos - определяет позицию полосы прокрутки (если не направлены коды SB_THUMBPOSITION или SB_THUMBTRACK), pScrollBar - указатель на объект полосы прокрутки (имеет значение NULL, если сообщение пришло от стандартной полосы прокрутки).
void CMainWin :: OnVScroll (UINT SBCode, INT Pos, CScrollBar * SB)
[char str [255];
switch (SBCode)
[case SB_LINEDOWN: vspos ++; break;
case SB_LINEUP: vspos -; break;
case SB_PAGEDOWN: vspos + = 5; break;
case SB_PAGEUP: vspos- = 5; break;
case SB_THUMBTRACK: vspos = Pos; break;
case SB_THUMBPOSITION: vspos = Pos; break;
]
InvalidateRect (NULL); // Обновление всего окна
SetScrollPos (SB_VERT, vspos); ]