
3. Резюме
Чтобы обеспечить доступ к устройствам графического вывода одновременно
нескольким программам, в Windows применяется специальный системный механизм
– контекст устройства. Все операции рисования приложения выполняют с помощью
контекста устройства. Это служебная структура, в которой хранятся все характери-
стики конкретного устройства, необходимые модулю GDI для рисования пикселей и
69
графических примитивов. Контекст устройства в MFC представлен классом CDC, от
которого унаследованы подклассы для разновидностей контекстов устройств Win-
dows, например, CPaintDC, CClientDC, CWindowDC.
Приложение при вызове функций рисования указывает координаты примити-
вов в логической системе координат. Соответствие между логической системой коор-
динат контекста устройства и физической системой координат, связанной с поверхно-
стью изображения, задается режимом преобразования координат.
В физической системе координат устройства расстояния измеряются в пиксе-
лах. Точка (0, 0) всегда располагается в левом верхнем углу поверхности отображе-
ния, ось x направлена вправо, а y – вниз. У логической системы координат эти пара-
метры могут быть другими. Начало координат можно разместить в любом месте по-
верхности изображения, можно изменить ориентацию осей и масштаб (этим управля-
ет режим преобразования координат).
Функции рисования GDI условно делятся на несколько групп: рисование от-
резков и кривых, рисование замкнутых фигур, отображение текста и др. Полный спи-
сок функций рисования есть в разделе справочной системе Visual C++ по классу CDC,
в котором эти функции оформлены в виде функций-членов.
При рисовании графических примитивов свойства отображения, например,
цвет и стиль линии, задаются параметрами контекста устройства, среди которых наи-
более важные – текущие выбранные объекты GDI (перо для рисования линий, кисть
для заполнения областей, шрифт для вывода текста). Все классы-объекты GDI в MFC
унаследованы от базового класса CGdiObject: CPen для перьев, CBrush для кистей,
CFont для шрифтов. В каждом классе хранится дескриптор объекта GDI (в перемен-
ной-члене m_hObject).
Созданные программистом объекты GDI необходимо удалять. Перед удалени-
ем надо выбрать в контексте другой объект, т.к. текущий выбранный объект GDI уда-
лить нельзя.
4. Упражнения
1) Попробуйте выполнить примеры рисования, приведенные в лекции, подставляя
фрагменты исходного текста в обработчик OnPaint приложения Hello (оно было
рассмотрено в предыдущей лекции).
2) Изучите англо-русский словарь терминов по теме 5-й лекции (см. CD-ROM).
3) Выполните лабораторную работу №2, "Работа с модулем GDI" (см. CD-ROM).
70