702 Часть V. Инструментарий программиста При работе с библиотекой OWL 3.0 Borland поддерживает WinG с помощью
КЛаССОВ TWinGLibrary И TWinG.
Разработчики игр, будучи связаны жесткими условиями, настаивают на производительности еще более высокой, чем та, что обеспечивается даже WinG. На эти требования Microsoft ответила выпуском системы DirectDraw. В отличие от WinG, которая облегчает процесс копирования графических массивов в видеопамять, DirectDraw предоставляет разработчикам прямой доступ к видеопамяти без необходимости выполнять промежуточные операции копирования. Это отличие, достаточно трудно уловимое, является весьма существенным там, где важна скорость вывода образов на экран. В отличие от WinG, DirectDraw не поддерживается классами библиотеки OWL.
Когда речь идет о скорости вывода, на фоне и WinG, и DirectDraw производительность GDI выглядит весьма слабо. В то же время вместе с реализованными в Borland C++ 5 интерфейсом API и классами OWL, GDI обеспечивает поддержку широкого круга абстракций, которые существенно облегчают разработку сложных графических приложений.
*
Объекты GDI и контексты графических устройств
Для понимания того, как библиотека OWL обеспечивает поддержку GDI, необходимо знакомство с двумя понятиями: контекстом графического устройства и объектами GDI. На рис. 25.1 показана иерархия наследования в OWL с базовым классом TGDiBase. Почти вся поддержка GDI в OWL основана на классах, наследуемых от TGDiBase.
При изучении этой иерархии сразу бросается в глаза одна особенность:
стандартные классы OWL, с которыми вы, вероятно, знакомы лучше всего, не являются частью этого дерева наследования. Но разве, например, окна и панели инструментов не являются основными графическими примитивами?
Ответ на этот вопрос, разумеется, "Да", однако следует хорошо понимать, что GDI — это графическая библиотека, предназначенная, прежде всего, для решения задач нижнего уровня. GDI находится в полном неведении о проблемах графики интерфейса пользователя, таких как ширина заголовка окна или цвет затененного края кнопки. На вопросы такого сорта ответы знает операционная система Windows, которая, в свою очередь, используя GDI, уже размещает графические элементы на экране компьютера. Как легко видеть из рис. 25.1, дерево наследования TGDiBase состоит из трех частей: классы, наследуемые от TDC, классы, наследуемые от TGDiobject, и несколько промежуточных классов, не входящих ни в одно из предыдущих поддеревьев. Как, вероятно, вы уже могли догадаться, TDC — это базовый класс контекста устройства. Хотя классы контекста устройства непосредственно наследуются от TGDiBase, функционально они отделены в собственное поддерево наследования и совершенно отличны от остальных классов, наследуемых ОТ TGDIObJect.