Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_ОСиСП.docx
Скачиваний:
56
Добавлен:
20.04.2019
Размер:
623.57 Кб
Скачать

9. Принципы построения графической подсистемы ос Windows. Понятие контекста устройства. Вывод графической информации на физическое устройство.

Взаимодействие приложения с GDI осуществляется при непременном участии еще одного посредника — так называемого контекста устройства.

Контекст устройства (device context) — это внутренняя структура данных, которая определяет набор графических объектов и ассоциированных с ними атрибутов, а также графических режимов, влияющих на вывод.

В следующем списке приведены основные графические объекты: Перо (реn) для рисования линий. Кисть (brush) для заполнения фона или заливки фигур. Растровое изображение (bitmap) для отображения в указанной области окна. Палитра (palette) для определения набора доступных цветов. Шрифт (font) для вывода текста. Регион (region) для отсечения области вывода.

Если необходимо рисовать на устройстве графического вывода (экране дисплея или принтере), то сначала нужно получить дескриптор контекста устройства. Возвращая этот дескриптор после вызова соответствующих функций, Windows тем самым предоставляет разработчику право на использование данного устройства. После этого дескриптор контекста устройства передается как параметр в функции GDI, чтобы идентифицировать устройство, на котором должно выполняться рисование. Контекст устройства содержит много атрибутов, определяющих поведение функций GDI. Благодаря этому списки параметров функций GDI содержат только самую необходимую информацию, например начальные координаты или размеры графического объекта. Все остальное система извлекает из контекста устройства. Только если значения по умолчанию не устраивают разработчика, необходимо вызывать функции GDI, изменяющие значения соответствующих атрибутов.

Win32 API поддерживает следующие типы контекстов устройства: контекст дисплея; контекст принтера; контекст в памяти (совместимый контекст); метафайловый контекст; информационный контекст.

Вывод на физическое устройство:

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

В отличие от контекста отображения, контекст физического устройства не получается, а создается, для чего используется функция CreateDC :

HDC WINAPI CreateDC(

LPCSTR lpszDriver, // имя драйвера

LPCSTR lpszDevice, // имя устройства

LPCSTR lpszOutput, // имя файла или порта вывода

const void FAR* lpvInitData); // данные для инициализации

10. Рисование геометрических фигур. Графические инструменты. Управление цветом. Палитры цветов.

Любая линия рисуется в Windows с использованием графического объекта, называемого пером. Контекст устройства содержит перо по умолчанию — сплошное перо черного цвета толщиной 1 пиксел. Текущая позиция пера является одним из атрибутов контекста устройства. Она определяется значением типа POINT. По умолчанию текущая позиция пера установлена в точку (0, 0). Если нужно изменить текущую позицию, вызывается функция MoveToEx.

SetPixel устанавливает заданный цвет в точке с указанными координатами: COLORREF SetPixel(HDC hDC, int x, int y, COLORREF crColor);

BOOL LineTo(hDC, int x, int y); Функция рисует линию от текущей позиции до места, указанного в аргументах. Чтобы изменить тип линии (толщину, стиль)- меняется тип пера.

BOOL Arc(hDC, int left, int top, int right, int bottom, int x1, int y1, int x2, int y2); Первые четыре аргумента - левый верхний и правый нижний углы прямоугольника, в который вписан эллипс. Остальные значения - координаты точек, от которых будут проведены прямые к центру эллипса. В местах пересечения первой и второй прямой с радиусом эллипса, начинается и кончается дуга.

BOOL Rectangle(hDC, int left, int top, int right, int bottom); // Прямоугольник. По умолчанию прозрачный, а вообще, тип его заливки определяется текущей кистью. По умолчанию она тоже прозрачная. Аргументы - это координаты левого верхнего и правого нижнего углов.

BOOL RoundRect(hDC, int left, int top, int right, int bottom, int width, int height); Закруглённый прямоугольник. Первые пять параметров совпадают с параметрами предыдущей фукнции. Далее width и height задают ширину и высоту эллипса, дуги которого ограничивают прямоугольник. 

Создать кисть можно с помощью функции CreateSolidBrush :

HBRUSH WINAPI CreateSolidBrush(COLORREF clrref);

В качестве параметра для этой функции необходимо указать цвет кисти. Для выбора цвета вы можете воспользоваться, например, макрокомандой RGB, позволяющей указать содержание отдельных цветовых компонент.

После использования созданной вами кисти ее следует удалить, не забыв перед этим выбрать в контекст отображения старую кисть. Для удаления кисти следует использовать макрокоманду DeleteBrush :

#define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr))

Управление цветом:

Пиксел — это минимальный по размерам изобразительный элемент, которым может управлять приложение. В свою очередь, пиксел образован тремя микроточками, не различимыми невооруженным глазом, которые имеют, соответственно, красный, зеленый и синий цвета. Микроточки могут светиться с интенсивностью от 0 (отсутствие излучения) до 255 (максимальная яркость). Совокупность их свечения образует текущий цвет пиксела. Таким образом, цвет пиксела можно рассматривать как некоторую точку в трехмерном RGB-пространстве, образованном тремя цветовыми осями: Red (красная цветовая составляющая), Green (зеленая составляющая) и Blue (синяя составляющая).

Цветовая палитра представляет собой таблицу (массив) цветов, которые способно воспроизвести устройство. Вход в таблицу для доступа к каждому цвету осуществляется по индексу.

В Win32 GDI используется несколько типов палитр. Системная палитра (system palette) определяет все цвета, которые могут быть одновременно отображены устройством. Диапазон цветов зависит от аппаратной палитры, реализуемой видеоадаптером, и от настроек экрана. Приложение не может непосредственно модифицировать системную палитру. Системная палитра обычно содержит 256 элементов (входов), из которых 20 зарезервировано для так называемых статических цветов, которые никогда не изменяются. Эти цвета используются всеми приложениями для вывода меню, кнопок, фона окна, текстовых надписей и других элементов стандартного интерфейса.

Логическая палитра (logical palette) — это палитра уровня приложения. Она создается приложением и закрепляется за контекстом устройства. Логическая палитра позволяет определять и использовать цвета, которые соответствуют потребностям приложения. После создания логической палитры с помощью функции CreatePalette или CreateHalftonePalette она должна быть реализована вызовом функции ReaHzePalette.