Операции с графическими объектами
После создания приложения контроллера домена дисплея или принтера он может начать рисование на связанном устройстве или, в случае с контроллером памяти, он может начать рисование растрового изображения, хранящегося в памяти. Однако перед началом рисования, а иногда и во время выполнения рисования часто необходимо заменить объекты по умолчанию новыми объектами.
Приложение может изучить атрибуты объекта по умолчанию, вызвавGetCurrentObject и функции GetObject. Функция getCurrentObject возвращает дескриптор, определяющий текущее перо, кисть, палитру, растровое изображение или шрифт, а функция getObject инициализирует структуру, содержащую атрибуты этого объекта.
Некоторые принтеры предоставляют резидентные ручки, кисти и шрифты, которые можно использовать для повышения скорости рисования в приложении. Для перечисления этих объектов можно использовать две функции: EnumObjects и EnumFontFamilies. Если приложение должно перечислить резидентные ручки или кисти, он может вызвать функцию EnumObjects для проверки соответствующих атрибутов. Если приложение должно перечислить местные шрифты, он может вызвать функцию EnumFontFamilies (которая также может перечислять шрифты GDI).
Когда приложение определяет, что объект по умолчанию требует замены, он создает новый объект, вызывая одну из следующих функций создания.
Графический объект | Функция |
---|---|
Точечный рисунок | CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDiscardableBitmap, CreateDIBitmap |
Щётка | CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush |
Цветовая палитра | CreatePalette |
Шрифт | CreateFont, CreateFontIndirect |
Ручка | CreatePen, CreatePenIndirect, ExtCreatePen |
Область | CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRectRgn |
Каждая из этих функций возвращает дескриптор, определяющий новый объект. После получения дескриптора приложение должно вызвать функциюSelectObject, чтобы заменить объект по умолчанию. Однако приложение должно сохранить дескриптор, определяющий объект по умолчанию, и использовать этот дескриптор для замены нового объекта, если он больше не нужен. Когда приложение завершит рисование с новым объектом, он должен восстановить объект по умолчанию, вызвав функцию SelectObject, а затем удалить новый объект, вызвав функцию DeleteObject. Сбой удаления объектов приводит к серьезным проблемам с производительностью.