Я думаю, вам нужно более внимательно прочитать документацию. Класс CScrollView
определяет относительно немного дополнительных (к своему базовому классу CView
) методов. Он будет автоматически отображать полосы прокрутки, если прокручиваемая область больше видимой клиентской области. Некоторые ключевые методы: SetScrollSizes()
, GetScrollPosition()
и GetClientRect()
(унаследовано от CWnd
).
Пересчитайте размер области прокрутки (и вызовите SetScrollSizes()
) в любом случае, это может понадобиться - для Например, изменение данных в вашем CDocument
или когда пользователь изменяет некоторые «Параметры просмотра».
Тогда есть два способа нарисовать (OnDraw()
) ваш документ:
- Нарисуйте всю прокручиваемую область. Это очень просто реализовать, но как-то «расточительно», поскольку может закрашивать область, которая не видна.
- Рисовать только видимую часть прокручиваемой области. Позвоните
GetTotalSize()
(или просто проверьте значения, которые вы ранее передали SetScrollSizes()
- вам придется их сохранить), GetClientRect()
и GetScrollPosition()
, чтобы определить, что вам нужно рисовать. Вы должны рисовать только прямоугольник, возвращенный GetClientRect()
(вам нужно сместить его на положение прокрутки, возвращаемое GetScrollPosition()
).
В любом случае вы также должны проверить, имеет ли прокручиваемый размер меньше, чем видимый клиентский прямоугольник) и в горизонтальном, и в вертикальном направлениях. Если это так, заполните остальные цвета нейтральным цветом, указав область «без данных» или «пустую». Лучше использовать стандартный системный цвет, возвращаемый GetSysColor()
(например, COLOR_3DFACE
или COLOR_BTNFACE
), или какой-нибудь пользовательский более темный bru sh.