На этом шаге мы приведем правила рисования в контексте устройства.
Каркас передает функции OnDraw() объект контекста устройства, описывающий рабочую область окна приложения.
В классе CDC - базовом классе для всех MFC-объектов контекста устройства - имеются функции,
позволяющие изображать линии, формы и области заливки, выводить текст и обрабатывать растровые шаблоны.
Графические функции работают совместно с MFC-классами разных инструментов рисования:
- СРеn (для изображения линий),
- CBrush (для заливки областей),
- CFont и
- CBitmap.
Они применяют те инструменты рисования, которые выбраны (selected) в контексте устройства.
Например функция CDC::Rectangle() начертит в контексте устройства прямоугольник, используя текущее перо
СРеn, и сделает его заливку текущей кистью CBrush.
Ниже показан рекомендуемый порядок работы с объектами инструментов рисования.
например CPen::CreatePen().
SelectObject() перегружена для каждого типа выбираемого объекта.
указателя в переменной соответствующего типа.
контексте устройства предыдущий объект. Контекст устройства необходимо возвращать в исходное состояние.
Функция OnDraw() приложения МуАрр хорошо иллюстрирует эту процедуру. В следующих строках кода
объявляется и создается новый шрифт, выбираемый затем в текущем контексте устройства:
CFont aFont; aFont.CreateFont(16,0,0,0,0,0,0,0,0,0,0,0,FF_ROMAN,0); CFont *pOldFont = pDC->SelectObject(&aFont);
Шрифт aFont используется в последующих вызовах функции CDC::TextOut() при выводе текста в контекст устройства.
По завершении работы с этим шрифтом объект aFont выгружается, и восст навливается объект, сохраненный в
указателе pOldFont:
pDC->SelectObject(pOldFont);
Замечание.
Процедуру сохранения и восстановления в контексте устройства каждого объекта в отдельности можно заменить
CDC-методами SaveDC() и RestoreDC(), выполняющими сохранение и восстановление всего
контекста устройства.
Здесь описана реализация лишь пассивного отображения данных приложения. Для разработки более сложных представлений,
предусматривающих функции выбора объектов, удаления, копирования и вставки, а также поддерживающих манипуляцию
экранными объектами, рисование мышью и т. д., потрудиться придется гораздо больше.
На следующем шаге мы рассмотрим организацию процесса печати.