Выпуск №57 от 23 декабря 2001 г.
Здравствуйте, дорогие подписчики!
Опять я к сожалению заставил вас недоумевать, почему не выходит рассылка. Дело в том, что мне по личным причинам пришлось срочно поехать в другой город и пробыть там две недели. Выпускать рассылку оттуда в это время не было никакой возможности. Само собой разумеется, что теперь рассылка будет выходить вовремя. Я искренне прошу прощения и надеюсь на ваше понимание. Ну а теперь – к делу! Ведь за это время на сайте RSDN появилось много интересного…
СТАТЬЯ
GDI+
Часть 1. Краткое знакомство
Автор: Виталий Брусенцев
Демонстрационное приложение на C++ (требует наличия GDI+) – 88 Кб.
Демонстрационное приложение на C# (требует CLR) – 62 Кб.
За последний год компания Microsoft подготовила разработчикам множество сюрпризов. Новые продукты и технологии буквально завладели вниманием околокомпьютерного мира. Пока неясно, насколько успешным будет дебют технологии .NET и основанных на ней программных продуктов и средств разработки. Но одно из новшеств, безусловно, уже завоевало признание разработчиков, связанных с графикой и мультимедиа, – технология GDI+. Именно она, вернее, основанный на ней новый графический интерфейс является "лицом" новых операционных систем – Windows XP и .NET Server.
Что же такое GDI+? Официальная документация скромно называет ее Class-based API, то есть основанным на классах интерфейсе прикладных программ. Так как она встроена в Windows XP и .NET Server, ее называют частью этих операционных систем. Часто встречается также определение "библиотека" или "библиотека классов". В действительности, предоставляемый GDI+ набор классов является тонкой оболочкой над множеством обычных функций, реализованных в одной динамической библиотеке GdiPlus.dll. В общем, имея все это в виду, будем для краткости далее называть ее просто библиотекой.
Итак, GDI+ – это библиотека, призванная заменить существующий уже больше 11 (или 18 – как считать) лет интерфейс GDI, являющийся графическим ядром предыдущих версий Windows. Она сочетает в себе (по крайней мере, по замыслу) все достоинства своего предшественника и предоставляет множество новых мощных возможностей. Кроме того, при ее проектировании заранее ставилась цель наименее болезненного переноса приложений на 64-битные платформы. Следовательно, хотя существующие GDI-приложения будут выполняться на новых версиях Windows, для новых проектов следует использовать GDI+.
Заглянем "под капот"
Что новенького?
Далее мы еще будем рассматривать специфические (и такие эффектные!) возможности GDI+. Здесь же только опишем основные новшества.
Достоинства C++ – реализации:
• Объектно-ориентированный интерфейс:благодаря поддержке компилятора C++ мы "бесплатно" получаем контроль над типами и временем жизни объектов.
• Прозрачное управление памятью:объекты ядра GDI+ создаются в куче с помощью собственного менеджера памяти прозрачно для программиста.
• Использование перегрузки имен функций:функции одного назначения различаются только по своим параметрам.
• Собственное пространство имен:позволяет использовать понятные имена типов – такие, как Rect, Pen и Matrix – без конфликтов с другими библиотеками.
• Перегрузка операторов:предоставляет удобные операции '+' и '-' для таких типов, как Point и Size.
Архитектурные новинки библиотеки:
• Аппаратная абстракция:как уже было замечено, упрощается перенос на 64-битные платформы.
• теперь можно не бояться "оставить выбранной кисть в контексте перед удалением" – такая типичная для GDI ошибка! Новый дизайн графических функций/объектов:
• Разделение функций закраски и отрисовки:предоставляет большую гибкость в рисовании, например, позволяет заливать незамкнутые фигуры.
• Появление графических контейнеров:контейнеры позволяют "сцепить" вместе несколько операций и использовать как одну команду.
• Увеличившаяся поддержка путей (paths) и их взаимодействия с регионами:теперь пути являются полноправными объектами вне контекста рисования и могут легко трансформироваться в регионы.
Новые технологии и возможности (задержите дыхание):
• Градиентная закраска:позволяет заливать сложные фигуры оттенками с различными законами распределения цвета, рисовать векторные примитивы (например, линии) с градиентной окраской.
Читать дальше