Функции графического вывода (модуль GDI)
Функции модуля GDI (Graphics Device Interface, интерфейс графических устройств) обеспечивают рисование графических примитивов аппаратно-независимым образом. Для абстракции от конкретного устройства применяется понятие контекст устройства. Это системный объект, обеспечивающий интерфейс с конкретным графическим устройством. С помощью контекста можно выполнять графический вывод на устройство или получать информацию о его свойствах (имя устройства, разрешение, цветовые возможности и др.).
При рисовании примитивов (отрезков, прямоугольников, эллипсов, текста и т.п.) функциям рисования передается дескриптор контекста устройства. Контекст устройства преобразует общие, независимые от устройства, графические команды в набор команд конкретного устройства. Например, когда приложение вызывает из GDI функцию Ellipse, то сначала контекст устройства определяет, какой драйвер будет выполнять это действие. Затем драйвер устройства может передать вызов аппаратному ускорителю (если он есть в видеоадаптере) или нарисовать эллипс по точкам.
Контексты устройств GDI представляют широкий спектр устройств. Типичными контекстами являются дисплейный контекст устройства(для выполнения вывода непосредственно на экран компьютера), контекст устройства в памяти (для рисования поверх изображения, хранящегося в оперативной памяти), и принтерный контекст устройства (при выводе в этот контекст вызовы приложения в конечном счете преобразуются в управляющие коды принтера и посылаются на принтер).
Рисование в контексте устройства обычно производится в логических координатах. Эти координаты описывают примитивы посредством аппаратно-независимых физических единиц. Например, при задании прямоугольника можно указать его размеры в сантиметрах. GDI автоматически выполняет преобразование логических координат в физические координаты устройства. В качестве параметров преобразования приложение может задать начало координат и размер области вывода в логических и физических координатах. От положения начала координат в обеих системах зависит горизонтальное и вертикальное смещение примитивов в области вывода. Размер области вывода определяет ориентацию и масштаб примитивов после преобразования.
При рисовании примитивов часто указываются их свойства: цвет, толщина и стиль линии и т.п. Для этого служат объекты GDI: перья, кисти, шрифты, растровые изображения и палитры. Их можно создавать и выбирать в контексте устройства для того, чтобы рисуемые впоследствии примитивы выглядели нужным образом.
Кроме рисования графических примитивов, часто используются функции GDI для бит-блиттинга, предназначенные для быстрого копирования растровых изображений. В некоторых приложениях их скорости недостаточно, т.к. при рисовании эти функции используют контекст устройства в качестве посредника между приложением и устройством. Поэтому для непосредственного обращения к видеосистеме был разработан менее безопасный, но существенно более быстрый набор функций для манипуляций с растровыми изображениями – DirectDraw API.
Модуль GDI обеспечивает работу с регионами (структурами, описывающими экранные области, возможно, непрямоугольные) и выполняетотсечение (clipping). Отсечение – это очень важная операция для среды Windows, т.к. она позволяет приложениям рисовать на экране, не отслеживая границ области рисования (например, границы клиентской области окна). Отсечение применяется для корректного отображения на экране перекрывающихся окон.
Дополнительные API
Возможности Windows не исчерпываются набором функций, содержащихся в трех модулях "ядра". Существует также большое количество других динамических библиотек с дополнительными API, например:
· Стандартные элементы управления. Эти функции позволяют работать с элементами управления, появившимися в Windows 95.
· Стандартные диалоговые окна. Приложение может пользоваться стандартными окнами для открытия файла для чтения или записи, для выбора цвета из цветовой палитры, для выбора шрифта из набора установленных шрифтов, и некоторыми др. Эти диалоги можно использовать в стандартном виде или модифицировать их поведение путем замены оконных процедур.
· MAPI служит стандартным интерфейсом для доступа к различным программам электронной почты и электронных сообщений.
· DirectX API. Для некоторых приложений (в особенности, игр) опосредованный доступ к аппаратным устройствам через драйверы Windows оказывается неэффективным. Поэтому Microsoft разработала набор технологий под общим названием DirectX, который ускоряет доступ к аппаратуре. В набор библиотек DirectX входит библиотека DirectDraw для экранных операций, DirectInput для чтения информации с устройств ввода, DirectSound для работы со звуком и Direct3D для построения трехмерных сцен.
· ActiveX, COM и OLE. Эти технологии предназначены для создания объектов, распределенных между приложениями. Они включают в себя создание контейнеров и серверов OLE, реализующих вставку объектов OLE в документы приложений-контейнеров (например, как редактор формул в MS Word), автоматизацию OLE, интерфейс "перетащи и оставь" и элементы управления ActiveX. В настоящее время Microsoft использует ActiveX в качестве основного механизма взаимодействия прикладных программ с системными службами Windows.
· TAPI предоставляет доступ к телефонному оборудованию. Это аппаратно-независимый интерфейс для работы с модемами, факс-модемами, аппаратурой голосовой телефонии.
В Windows есть отдельные API для работы с сетями, например, WinSock (библиотека сокетов Windows), RAS (Remote Access Service, сервис удаленного доступа) и RPC (библиотека вызова удаленных процедур).
При программировании на Си с использованием API исходный текст программ получается довольно громоздким. Программирование существенно упрощается при использовании библиотек классов вроде MFC и языка Си++. Но еще одно изменение стиля программирования происходит на уровне API. В прошлом, когда компания Microsoft включала в Windows новую возможность, она также расширяла описание интерфейса API – набора системных вызовов. Сейчас многие новые механизмы Windows (например, DirectX) не поддерживают традиционного API. Вместо этого они используют технологию ActiveX. Термином ActiveX теперь принято обозначать последние версии стандартов, которые ранее назывались OLE и COM.