Шаг 58.
Среда программирования Visual C++.
Рисование в контексте устройства

    На этом шаге мы приведем правила рисования в контексте устройства.

    Каркас передает функции OnDraw() объект контекста устройства, описывающий рабочую область окна приложения. В классе CDC - базовом классе для всех MFC-объектов контекста устройства - имеются функции, позволяющие изображать линии, формы и области заливки, выводить текст и обрабатывать растровые шаблоны.

    Графические функции работают совместно с MFC-классами разных инструментов рисования:

    Они применяют те инструменты рисования, которые выбраны (selected) в контексте устройства. Например функция CDC::Rectangle() начертит в контексте устройства прямоугольник, используя текущее перо СРеn, и сделает его заливку текущей кистью CBrush.

    Ниже показан рекомендуемый порядок работы с объектами инструментов рисования.

  1. Создайте графический объект; этот процесс включает объявление объекта, а затем его инициализацию соответствующей функцией, например CPen::CreatePen().
  2. Вызвав функцию CDC::SelectObject(), выберите объект в текущем контексте устройства. Функция SelectObject() перегружена для каждого типа выбираемого объекта.
  3. SelectObject() возвращает указатель на предыдущий выбранный графический объект. Сохраните значение указателя в переменной соответствующего типа.
  4. По завершении работы с текущим графическим объектом, пользуясь сохраненным указателем, выберите в контексте устройства предыдущий объект. Контекст устройства необходимо возвращать в исходное состояние.

    Функция 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(), выполняющими сохранение и восстановление всего контекста устройства.

    Здесь описана реализация лишь пассивного отображения данных приложения. Для разработки более сложных представлений, предусматривающих функции выбора объектов, удаления, копирования и вставки, а также поддерживающих манипуляцию экранными объектами, рисование мышью и т. д., потрудиться придется гораздо больше.

    На следующем шаге мы рассмотрим организацию процесса печати.




Предыдущий шаг Содержание Следующий шаг