Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

4.2 Структура gdi

С точки зрения программиста GDI состоит из нескольких сотен функций и нескольких связанных с ними типов данных, макросов и структур. Но прежде, чем рассматривать некоторые из этих функций подробно, следует остановиться на общей структуре GDI .

4.2.1 Типы функций

В основном, функции GDI могут быть разбиты на несколько крупных групп. Это группы не имеют четких границ и частично перекрываются. Все они, тем не менее, перечислены ниже:

Функции, которые получают (или создают) и освобождают (или уничтожают) контекст устройства.

Как уже указывалось в главе 3, вам для рисования необходим описатель контекста устройства. Функции GetDC и ReleaseDC позволяют вам сделать это внутри обработчиков сообщений, отличных от WM_PAINT. Функции BeginPaint и EndPaint (хотя технически — это часть подсистемы USER в Windows) используются в теле обработчика сообщения WM_PAINT для рисования. Некоторые другие функции, относящиеся к работе с контекстом устройства, мы рассмотрим ниже.

Функции, которые получают информацию о контексте устройства. Вспомним, в программе SYSMETS в главе 3 мы использовали функцию GetTextMetrics для получения информации о размерах выбранного в контексте устройства шрифта. Далее в этой главе мы рассмотрим программу DEVCAPS1, с помощью которой можно получить самую общую информацию о контексте устройства.

Функции рисования. Очевидно, из всех предварительно рассмотренных функций — это одна из самых важных. В главе 3 мы использовали функцию TextOut для отображения текста в рабочей области окна. Как мы увидим далее, другие функции GDI позволяют рисовать линии, залитые области, растровые образы.

Функции, которые устанавливают и получают атрибуты контекста устройства.

Атрибут контекста устройства определяет различные особенности работы функции рисования. Например, вы используете функцию SetTextColor для задания цвета любого текста, выводимого с использованием функции TextOut (или любой другой функции вывода текста). В программах SYSMETS в главе 3 мы использовали функцию SetTextAlign для того, чтобы сообщить GDI, что начальное положение текстовой строки при вызове функции TextOut должно быть справа, по умолчанию — левое начальное положение. Все атрибуты контекста устройства имеют значение по умолчанию, которое устанавливается при получении контекста устройства. Для всех функций Set есть функции Get, позволяющие получить текущее значение атрибута контекста устройства.

Функции, которые работают с объектами GDI. Именно эти функции вносят в GDI некоторый беспорядок. Сначала пример: по умолчанию любые линии, которые вы рисуете, используя GDI, — сплошные и стандартной ширины. Вы хотите изобразить линии более широкими или сделать их штрихпунктирными. Ширина линии и стиль линии не являются атрибутами контекста устройства. Это характеристики "логического карандаша". Вы можете создать логический карандаш, указав данные характеристики в функциях CreatePen, CreatePenIndirect, ExtCreatePen. Эти функции возвращают описатель логического карандаша. (Хотя считается, что эти функции являются частью GDI, в отличие от большинства функций GDI они не требуют описателя контекста устройства.) Для использования логического карандаша вы "выбираете" описатель в контекст устройства. С этого момента все рисуемые линии будут отображаться с использованием этого карандаша. Затем вы отменяете выбор объекта "карандаш" и уничтожаете его. Кроме карандашей, вы также используете объекты GDI для создания кистей, которыми зарисовываются замкнутые области для создания шрифтов, растровых образов и других объектов GDI, о которых будет рассказано в этой главе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]