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

102. Средства и методы gdi. Перья. Кисти. Изменение цветов фона. Изменение цветов текста.

GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры.

GDI отвечает за отрисовку линий и кривых, отображение шрифтов и обработку палитры.

С помощью GDI возможен вывод текста различными шрифтами, а также шрифтами, вшитыми в принтер .Буквы всегда заливаются одним цветом («текущий цвет»), промежутки между ними либо остаются прозрачными, либо же заливаются другим цветом («текущий цвет фона»).

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

Перья Windows

Когда Windows рисует на экране, она использует информацию о текущих кисти и пере. Перо (pen) используется для рисования линий и контуров геометрических фигур. Оно имеет три основных параметра: толщину, тип линии (пунктир, точки, сплошная) и цвет. В Windows всегда доступны любой программе перья для рисования черных и белых линий. Можно также создавать собственные перья. Например, вы можете создать жирную светло-серую линию, чтобы обвести часть экрана, или линию типа "точка-тире-точка" для графического изображения данных электронной таблицы.

Кисти Windows

Windows использует кисть (brush) для закрашивания областей определенным цветом или узором. Минимальный размер кисти 8х8 точек и, подобно перьям, имеют три основных параметра: размер, шаблон и цвет. Шаблон может представлять собой чистый цвет, различную штриховку или любой заданный пользователем узор.

Каждое окно, создаваемое в приложении Windows, должно принадлежать к какому-либо классу. Создаваемые вами окна могут иметь разнообразные стили, цвета, шрифты, расположение, заголовки, значки и так далее. Можно также создавать ваши собственные цветные значки (не зависящие от типа дисплея) при помощи редактора ресурсов из пакета компилятора C++.

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

Цвет, который устройство использует для рисования, хранится в цветовой палитре. Если вы желаете добавить цвет, которого нет в цветовой палитре, то его можно добавить.

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

Передается размер окна WM_SIZE:

xSize = LOWORD(lParam);

ySize = HIWORD(lParam);

InvalidateRect(hwnd, NULL, TRUE);

потом устанавливаются координаты в какой-то точке и таким образом создаем область вывода.

SetViewportOrgEx(hdc, xSize/4, ySize/4, NULL);

Rectangle(hdc, -xSize/5, ySize/10, xSize/5, -ySize/10);

//2-я область

SetViewportOrgEx(hdc, xSize/4*3, ySize/4, NULL);

Ellipse(hdc, -xSize/5, ySize/9, xSize/5, -ySize/9);

//3-я область

SetViewportOrgEx(hdc, xSize/4, ySize/4*3, NULL);

Ellipse(hdc, -ySize/5, ySize/5, ySize/5, -ySize/5);

//4-я область

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

Для рисования эллипса или окружности применяется функция Ellipse(). Центром эллипса является центр воображаемого прямоугольника, заданного точками (х1, у1) и (х2, у2).

Поскольку эллипс — замкнутая фигура, его можно закрасить.

Вызов функции выглядит так:

Ellipse (hdc,x1,y1,x2,y2)

Параметр hdc задает контекст устройства, остальные параметры имеют тип int. Функция возвращает значение типа BOOL.

Функция Rectangle() рисует прямоугольник, заданный точками (х1, у1) и (х2, у2). Как и другие замкнутые фигуры, прямоугольник закрашивается текущей кистью. Вызов функции выглядит так:

Rectangle (hdc, х1,у1,х2,у2)

Параметр hdc задает контекст устройства, остальные параметры имеют тип int. Их значения не должны превосходить 32 767 (7FFFH).

Прямоугольник с закругленными краями рисуется с помощью функции RoundRect(). Из файла wingdi.h добываем ее описание.

WINGDIAPI BOOL WINAPI RoundRect(HDC, int, int, int, int, int, int);

Первые пять аргументов полностью идентичны аргументам функции Rectangle(). Последние два аргумента содержат ширину и высоту эллипса, определяющего дуги. После прорисовки прямоугольник закрашивается текущей кистью. В случае успешного завершения функция возвращает TRUE.

Рисование линии

Нарисовать линию можно с помощью функции LineTo(). Она описана в файле wingdi.h:

WINGDIAPI BOOL WINAPI LineTo(HDC, int, int);

Первый аргумент - контекст устройства. Второй и третий аргументы - координаты точки, ДО КОТОРОЙ ОТ ТЕКУЩЕЙ ПОЗИЦИИ будет проведена линия. При успешной завершении функция возвращает TRUE.