Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
370
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

Областьотсечения

SelectClipRgn IntersectClipRgn

GetClipBox

 

OffsetClipRgn ExcludeClipRgn

 

 

SelectClipPath

 

 

 

 

Сохранение контекста устройства.

Использование: для того, чтобы изменения атрибутов контекста устройства, сохранялись, при освобождении контекста устройства, и использовались в следующий раз при вызове GetDC или BeginPaint.

Реализация:

включить флаг CS_OWNDC при регистрации класса окна, проинициализировав атрибуты контекста устройства при обработке сообщения WM_CREATE

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC

использовать стиль CS_CLASSDC, что приводит к тому, что все окна такого базового класса разделяют один контекст устройства

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC

Принеобходимостиизменитьнекоторыеатрибутыконтекстаустройства, нарисоватьчто-нибудь, используяизмененныеатрибуты, затемвернутьсякоригинальному(предыдущему) состоянию контекстаустройствавызывается:

iSavedID = SaveDC (hdc);

Возвраткконтекстуустройства, существовавшему перед вызовом SaveDC:

RestoreDC (hdc, iSavedID);

Прямые (отрезки) и кривые

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

Создание прямых:

MoveTo()

MoveTo(10, 10); - перемещает текущую позицию в точку с координатами A(10,10).

LineTo()

LineTo(10, 10); - рисует линию от текущей позиции до точки с координатами

A(10,10).

Для соединения массива точек используется:

функция LineTo

POINT pt [5] = { 100, 100, 200, 100, 200, 200,

100, 200, 100, 100}; // массивиз5 точек(10 значений)

MoveToEx (hdc, pt[0].x, pt[0].y, NULL);

for (i = 1; i < 5; i++)

LineTo (hdc, pt[i].x, pt[i].y);

функцияPolyline

Polyline (hdc, pt, 5);//рисованиетогожемассиваиз5 точек

Создание прямоугольников:

Rectangle()

Rectangle (hdc, xLeft, yTop, xRight, yBottom);

Создание прямоугольника с закругленными углами:

RoundRect()

RoundRect (hdc, xLeft, yTop, xRight, yBottom, xCornerEllipse, yCornerEllipse);

Создание эллипсов:

Ellipse()

Ellipse (hdc, xLeft, yTop, xRight, yBottom);

Создание дуг:

Arc()

Arc (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);

Методы Chord() (сегмент) и Pie() (сектор) принимают такие же аргументы, имеющие тот же смысл, что и в случае метода Arc(). Сегмент получается из дуги соединением конечных точек, а сектор - соединением конечных точек с центром эллипса.

Chord (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);

Pie (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);

Создание сплайнов:

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

PolyBezier (hdc, pt, iCount);

PolyBezierTo (hdc, pt, iCount);

Удаление объектов: с помощью функции DeleteObject.

Закрашенные области

Если набор прямых и кривых линий ограничивает со всех сторон некоторую область, то она может быть закрашена с использованием объекта GDI "кисть", выбранного в контексте устройства.

Кисть может быть сплошной, штриховой (состоящей из горизонтальных, вертикальных или диагональных штрихов) или шаблонной, заполняющей область горизонтально и вертикально.

Для выбора одной из встроенных кистей можно воспользоваться функцией GetStockObject, однако в Windows есть только монохромные встроенные кисти.

Использование: для заполнения содержимого рисуемых фигур. Использование кисти определяет цвет и образец заполнения. По умолчанию в контексте рабочей области окна установлена кисть черного цвета и сплошной заливки.

Создание: при создании и использовании кистей используются несколько дополнительных функций:

Для создания цветной сплошной кисти используется функция CreateSolidBrush.

Приложение может создать одну из шести кистей штриховки функцией

CreateHatchBrush.

Можно использовать свой собственный стиль штриховки, создав кисть из битового изображения функцией CreatePatternBrush.

При использовании кистей цвет фона и режим фона управляются функциями SetBkColor и SetBkMode соответственно. Соответствующий эффект на заполнение содержимого объектов оказывает также режим смешивания переднего плана, указанный в вызове функции SetROP2.

Специфической проблемой при использовании образцов и штриховки является проблема начала отсчета кисти. Начало отсчета кисти (brush origin) - это атрибут контекста устройства. Он используется для определения координат точки внутри кисти, которая будет служить начальной при закраске внутренней области фигуры или окна. По умолчанию используются координаты (0,0), соответствующие верхнему левому углу кисти (в системе координат, выбранной в контексте устройства по умолчанию).

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

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

Приложение может изменить начало отсчета кисти (сдвинуть кисть) при помощи функций SetBrushOrg иUnrealizeObject. Сначала при помощи функции UnrealizeOrg

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

Удаление: при помощи функции DeleteObject.

Битовые шаблоны (растровые шаблоны, растровые образы)

Битовые шаблоны — это двумерный массив битов, соответствующий пикселям устройства отображения. Это базовый инструмент в растровой графике.

Использование: для отображения сложных (часто из реального мира) изображений на дисплее или принтере - если нужно вывести на экран сложное изображение, содержащее множество мелких деталей, едва ли его имеет смысл рисовать при помощи перьев и

кистей.Битовые образы также используются для отображения маленьких картинок, таких как значки, курсоры мыши, кнопки панели инструментов программ, которые нужно быстро нарисовать.

Создание: для того чтобы использовать ресурс битового изображения, его нужно предварительно загрузить в память при помощи функции LoadBitmap. После загрузки изображения эта функция выдает дескриптор битового изображения типа HBITMAP.

HBITMAP hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE;

Можно заранее подготовить растровое изображение в одном из графических редакторов и сохранить его в bmp-файле. Затем можно воспользоваться этим изображением в приложении, включив его в состав ресурсов приложения.

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

Типы битовых шаблонов:

aппаратно-независимые, которые могут быть сохранены в файлах на диске;

аппаратно-зависимые, являющиеся объектами GDI;

Удаление: при помощи функции DeleteObject.

После загрузки растрового изображения его можно использовать.

Основные моменты работы с растровыми изображениями:

загрузить растровое изображение;

создать совместимый контекст устройства;

передать растровое изображение в совместимый контекст устройства;

передать с помощью BitBlt совместимый контекст устройства в контекст устройства окна;

выбрать старое растровое изображение в совместимый контекст устройства;

удалить совместимый контекст устройства;

удалить растровое изображение.

Текст и шрифты

Текст отличается от других математических объектов компьютерной графики. Типов текста бесконечно много. Поэтому поддержка текста часто наиболее сложная часть в системах компьютерной графики, и, вместе с тем, наиболее важная.

Функции для вывода текста:

Наиболее часто используемой функцией вывода текста является функция:

TextOut (hdc, xStart, yStart, pString, iCount);

Для отображения на экране одного столбца TabbedTextOut :

TabbedTextOut (hdc, xStart, yStart, pString, iCount, iNumTabs, piTabStops, xTabOrigin);

Расширенная функция вывода текста является функция ExtTextOut (приставка Ext означает расширенная):

ExtTextOut (hdc, xStart, yStart, iOptions, &rect, pString, iCount, pxDistance);

Выводтекставпрямоугольник

DrawText (hdc, pString, iCount, &rect, iFormat);

Шрифты.

Использование: шрифт определяет особенности изображения символов и размер.

Создание: перед тем, как приложение сможет вывести какой-либо текст, оно должно выбрать логический шрифт для выводимого текста. Приложения Windows могут:

использовать либо один из встроенных шрифтов, получив его функцией

GetStockObject;

либо создать свой при помощи функции CreateFont, передавая ей требуемые характеристики шрифта.

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

Типы шрифтов:

шрифты устройств;

шрифты GDI:

растровые шрифты - шрифт битовых шаблонов, "немасштабируемые" шрифтами. Они не могут быть растянуты или сжаты до произвольного размера. Основными преимуществами растровых шрифтов являются их быстрое отображение на экране и четкость;

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

типа True Type - это технология контурных шрифтов, которая была разработана

Apple Computer Inc. и Microsoft Corporation; она поддерживается многими производителями шрифтов. Отдельные символы шрифтов TrueType определяются контурами, состоящими из прямых линий и кривых. Таким образом, Windows может масштабировать эти шрифты, изменяя определяющие контур координаты.