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

Рисование на окне Windows

Графическое изображение на окне создается с помощью объектов рисования линий и закрашивания. Эти объекты являются таковыми лишь по названию, как совокупность ресурсов операционной системы, а не в смысле объектно-ориентированного программирования. Линии имеют такие характеристики как толщина, вид, цвет. Закраска может иметь определенный цвет и тип, например, закраска горизонтальными, диагональными линиями, сплошная и т п. . При выводе на экран рисованной фигуры с помощью функции WindowsAPIсистема определяет что в этой фигуре должно быть нарисовано с помощью линий, а что закрашено. Объект рисования линий называетсяPen– перо, а объект для закраскиBrush– кисть.

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

Параметрами функции SelectObjectмогут быть кроме пера и кисти также и некоторые другие объекты, которые перечислены ниже. Для создания объектов, которые используются при рисовании средствамиWindowsAPI, также могут применяться специализированные функции, использование которых может быть оправдано в некоторых типичных ситуациях.

Описание функции:

HGDIOBJ SelectObject(

HDC hdc, // идентификатор контекста устройства

HGDIOBJ hgdiobj //идентификатор выбираемого объекта

);

В нашем случае выбора пера или кисти на выходе функции получаем идентификатор соответствующего объекта бывшего текущим до вызова функции SelectObject. Этот идентификатор объекта типаHGDIOBJследует использовать для установления в качестве текущего после применения функций рисования с использованием определенного пера или кисти.

Параметр hgdiobj типаHGDIOBJ определяет выбираемый объект. Этот объект должен быть предварительно создан одной из следующих функций:

Объект Функции

Pen CreatePen, CreatePenIndirect

Brush CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush

Font CreateFont, CreateFontIndirect

Bitmap CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDIBitmap, CreateDIBSection

Region CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect

Здесь Font– шрифт;Bitmap– битовая карта, точечное (растровое) изображение;Region– регион, область, определяющая определенную часть окна, которая должна быть видима на экране и соответственно невидимую область окна. С помощью регионов можно создать, например, кнопку овальной или другой произвольной формы. Для подробного ознакомления с данными объектами следует обратиться к документации.

Пример рисования на окне с использованием объектов пера и кисти

В этом примере мы изобразим на форме Form1 прямоугольник, граница у которого нарисована красной линией толщиной 2 пиксела, а закрашен прямоугольник зеленым цветом. Напомню, что пиксел – это точка или элемент растрового изображения на мониторе, происходит от английского “pixel” –pictureelement.

Поместите на форму кнопку. Этой третьей кнопке в нашем приложении Delphiдаст названиеButton3. Создайте обработчик нажатия на эту кнопку в следующем виде:

procedure TForm1.Button3Click(Sender: TObject);

var

hdc : THandle;

hp,oldhp : HPEN;

hb,oldhb : HBRUSH;

begin

hdc:= GetDC(Form1.Handle);

hp:= CreatePen(PS_SOLID,2,clRed);

hb:= CreateSolidBrush(clGreen);

oldhp:= SelectObject(hdc,hp);

oldhb:= SelectObject(hdc,hb);

Rectangle(hdc,10,10,150,80);

SelectObject(hdc,oldhp);

SelectObject(hdc,oldhb);

deleteObject(hp);

deleteObject(hb);

ReleaseDC(Form1.Handle,hdc);

end;

В начале определяем контекст устройства: hdc:= GetDC(Form1.Handle), который освобождается в конце процедуры. В функцииCreatePenпервым параметром указано, что линии должны быть сплошными:PS_SOLID, второй параметр говорит о том что толщина линии 2 пиксела, а для установки красного цвета линий использовалась цветовая константаDelphiclRed. При установке пера и кисти функцияSelectObjectвозвращает идентификатор текущих пера и кисти, которые сохраняются в переменныхoldhpиoldhbсоответственно. Это позволяет восстановить настройки контекста устройства по завершении операций рисования после вызова функцииRectangleс помощью двух вызовов функцииSelectObject. Далее в процедуре объекты перо и кисть удаляются вызовом функцииdeleteObject. Конечно, если ресурсы компьютера позволяют, то создавать и удалять эти объекты можно в начале и конце работы программы соответственно, что ускорит работу приложения.

Соседние файлы в папке Методические материалы