Окт 13

Общие операции с графическими объектами

Как уже упоминалось ранее, GDI содержит набор графических объектов, обеспечивающих выполнение графических операций. К таким объектам относятся перья, кисти, растровые изображения, палитры, шрифты. Использование любого графического объекта предполагает выполнение следующей последовательности операций:
1. Создать графический объект.
2. Выбрать созданный объект в контекст устройства.
3. Вызвать графическую функцию, работающую с объектом.
4. Удалить объект из контекста устройства, вернув предшествующий объект.
5. Уничтожить объект.
Для создания GDI-объектов предназначены соответствующие функции Create..., которые в случае успешного завершения возвращают дескриптор объекта.
Выбор объекта в контекст устройства осуществляется при помощи функции SelectObject (палитры выбираются с помощью функции SelectPalette). Функция SetectObject имеет следующий прототип:
HGDIOBJ SelectObject(
HDC hdc, // дескриптор контекста устройства
HGDIOBJ hgdiobj // дескриптор GDI-объекта ):
В результате ее выполнения новый объект hgdiobj заменяет предшествующий объект того же типа в контексте устройства hdc.
Функция возвращает дескриптор предшествующего объекта. Для корректной работы приложение должно запомнить этот дескриптор и после окончания рисования с новым объектом (шаг 3) вернуть в контекст устройства предшествующий объект (шаг 4).
Для уничтожения объекта, ставшего ненужным, вызывается функция Delete Object.
Следует отметить, что не всегда для создания GDI-объекта нужно вызывать соответствующую функцию типа Create.... В системе имеется набор предопределенных (стандартных) графических объектов, и если параметры предопределенного объекта (перо, кисть, шрифт и т. д.) подходят для решаемой задачи, то приложение может получить такой объект с помощью функции GetStockObject. После окончания работы с предопределенным объектом его не нужно удалять при помощи функции DeleteObject. Предопределенные объекты существуют в системе постоянно.