Visual C++. Описание стандартных классов - CScrollView

ОГЛАВЛЕНИЕ


CScrollView

Класс CScrollView реализует все возможности класса CView, дополняя их возможностью прокрутки изображения в окне. Чтобы реализовать возможности прокрутки изображения в любом классе, производном от класса CView достаточно перегрузить в нем функции обработки сообщений OnHScroll и OnVScroll, однако класс CScrollView позволяет использовать следующие возможности: самостоятельно обрабатывает информацию о размерах окна и его рабочей области, а также о режимах отображения;
автоматически прокручивает изображение в ответ на сообщения, поступающие от полосы прокрутки;
автоматически прокручивает изображение в ответ на сообщения, поступающие от клавиатуры, обычной мыши и от колесика мыши IntelliMouse.
Для обработки сообщений от колесика мыши используются функции OnMouseWheel и OnRegisteredMouseWheel. В классе CScrollView реализация этих функции по умолчанию обеспечивает рекомендованную реакцию на сообщение WM_MOUSEWHEEL. Чтобы обеспечить в пользовательском классе просмотра возможность автоматической прокрутки окна следует использовать в качестве его базового класса класс CScrollView вместо класса CView. Для определения размера прокручиваемой области в функциях CView::OnInitialUpdate и CView::OnInitialUpdate вызывается функция SetScrollSizes (для определения значений ее аргументов пользователю необходимо написать свой программный код). Вызов функции SetScrollSizes позволяет установить режим отображения, общий размер прокручиваемой области и шаг вертикальной и горизонтальной прокрутки. Все размеры задаются в логических единицах. Логический размер области представления обычно определяется исходя из информации, хранящейся в документе, но в некоторых случаях используются фиксированные размеры области представления. Шаг горизонтальной и вертикальной прокрутки задается в логических единицах. По умолчанию, если пользователь щелкает левой кнопкой мыши в полосе прокрутки за пределами бегунка, то представление прокручивается на страницу. Если пользователь щелкает по стрелкам прокрутки, расположенным на концах полосы прокрутки, то представление прокручивается на строку. По умолчанию страница представляет собой 1/10 от общего размера области представления, а строка - 1/10 от размера страницы. Чтобы изменить эти величины следует вызвать функцию SetScrollSizes. Например при установке параметров вертикальной прокрутки текста размер страницы может быть установлен таким образом, чтобы после прокрутки вниз первой строкой нового окна была бы последняя строка старого окна, а размер строки равнялся бы высоте текстовой строки, выведенной с использованием текущего шрифта. Вместо прокрутки изображения в окне объект класса CScrollView может автоматически масштабировать область представления таким образом, чтобы ее размеры совпадали с размерами рабочей области окна. В этом режиме в окне отсутствуют полосы прокрутки. Чтобы использовать эту возможность нужно вызвать функцию CScrollView::SetScaleToFitSize (можно использовать функцию SetScaleToFitSize или SetScrollSizes, но не обе функции одновременно). Перед вызовом функции OnDraw пользовательского класса представления объект класса CScrollView автоматически устанавливает начало координат объекта класса CPaintDC, передаваемого в качестве аргумента данной функции. Чтобы установить начало координат в прокручиваемом окне класс CScrollView перегружает функцию CView::OnPrepareDC. Это позволяет автоматически установить начало координат объекта класса CPaintDC передаваемого классом CScrollView своей функции OnDraw. При использовании пользователем объектов класса CClientDC и других подобных объектов классов контекста устройств ему необходимо самому вызывать функцию CScrollView::OnPrepareDC. Перегрузка функции CScrollView::OnPrepareDC позволяет установить перо, цвет фона и другие атрибуты контекста устройств, но в этой функции обязательно должен быть вызван метод базового класса для реализации процедуры масштабирования. Различают следующие разновидности полос прокрутки: стандартные полосы прокрутки, имеющие стиль окна, и устанавливаемые стилями WS_HSCROLL и WS_VSCROLL;
полосы прокрутки, добавляемые в главное окно приложения, содержащее данный объект класса представления. В этом случае главное окно приложения само посылает сообщения WM_HSCROLL и WM_VSCROLL активному объекту класса представления;
главное окно приложения передает сообщения прокрутки от объекта класса элемента управления CSplitterWnd активной панели разделенного окна (представлению). Если объект класса CSplitterWnd использует разделяемые полосы прокрутки, то объект класса CScrollView использует эту полосу прокрутки, а не создает новую.
Описание данного класса содержится в файле заголовка afxwin.h.