Рисование в контексте устройства

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

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

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

  • СРеn (для изображения линий),
  • CBrush (для заливки областей),
  • CFont и
  • CBitmap.

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

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

  • Создайте графический объект; этот процесс включает объявление объекта, а затем его инициализацию соответствующей функцией,
    например CPen::CreatePen().
  • Вызвав функцию CDC::SelectObject(), выберите объект в текущем контексте устройства. Функция
    SelectObject() перегружена для каждого типа выбираемого объекта.
  • 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(), выполняющими сохранение и восстановление всего
    контекста устройства.

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

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



    Вы можете оставить комментарий, или Трекбэк с вашего сайта.

    Оставить комментарий