Работа с графикой в Borland C++ Builder

Систематизированные и переработанные материалы из литературы и Инета с добавением собственных находок.

В начало

1 Работа с графикой и контекст устройства

Введение

Borland C++ Builder имеет определенный набор компонентов и классов (хотя и нельзя сказать, что очень богатый), позволяющий не только рисовать графические примитивы, но и работать с изображениями, шрифтами и графическими файлами. Принципы работы с графическими изображениями в Borland C++ Builder основаны на общих принципах создания графических объектов в операционной системе Windows. Именно операционная система Windows предоставляет программисту средства интерфейса графических устройств (Graphics Device Interface, или сокращенно GDI). С GDI тесно связано понятие "Device Context" (DC) - контекста графического устройства, или, утрируя, то, на чём выполняется изображение. DC - универсальное устройство вывода для которого можно использовать одинаковые функции GDI для экрана, принтера и других устройств вывода. Это возможно потому, что и сама операционная система Windows является не зависящей от устройств системой (device independent). Со стороны Windows это обеспечивается библиотекой GDI32.dll (C:\Windows\system), а со стороны устройства - драйвером этого устройства. Связующим звеном между программой и устройством и является контекст устройства. Программа для вывода изображения должна получить хэндл контекста устройства, т. е. хэндл структуры, содержащей набор характеристик этого устройства. В этот набор входят битовые карты для изображений, перья, кисти, шрифты и т.д.

Программа обращается к контексту устройства через функции GDI.

В Windows поддерживаются следующие типы контекстов устройств:

  • контекст дисплея;

  • контекст принтера;

  • контекст в памяти (моделирует в памяти устройство вывода);

  • информационный контекст (служит для получения данных от устройств).

Когда программе требуется контекст устройства, она получает его уже заполненным значениями по умолчанию - так называемый текущий объект. Контекст устройства можно изменить. Программа может создать новый объект, и сделать его текущим. Замещенный объект из памяти не удаляется и его можно восстановить. Изменить значения характеристики можно только через замену объекта.

Используя функции GDI возможно оперировать с графическими объектами и получать графические изображения (эта возможность описана в разделе "Основные графические объекты и CDI"). В тоже время, работа c функциями GDI требовала от программиста выполнения множества вспомогательных и рутинных действий и большого внимания, что привело сначала (в старом добром Borland C++ без добавки Builder) к появлению OWL (Object Windows Library). В OWL функции GDI инкапсулированы и перегружены в классах (многие функции инкапсулированы как встроенные - inline функции, которые непосредственно переводятся в эквивалентные операторы WinApi и, как результат, потери в эффективности кода при "надстройки" OWL не было).

Средства Borland C++Builder используют все возможности GDI и OWL, но на более высоком уровне и, тем самым, еще более упрощают труд программиста. В тоже время, прямое обращение приложений к отдельным функциям Windows GDI также не исключается. И, хотя применение графических функций совместно с компонентами и классами Borland C++ Builder представляют собой более перспективную методику создания графики в приложении, но, на взгляд автора, старые добрые методы забывать не стоит, хотябы потому, что множество текстов программ многих авторов написано именно "по старому" и, врядли кто будет отрицать - только доскональное знание и понимание "изнутри" принципов работы с графикой дают возможность создавать по настоящему эффективные приложения (ровно как, не зная ассемблера, не поймешь и никакого другого языка).

Обобщая, можно сказать - Borland C++ Builder имеет возможность и прямого вызова функции GDI с использованием контекста устройства и может использовать собственный интерфейс для работы с графикой, через свойства своих компонент.

В начало

Продолжение. Основные графические объекты и CDI

Домой