Visual Basic 6. Руководство разработчика


Функции рисования - часть 5


MoveToEx Forml.hdc, 10, 10, point

LineTo Forml.hdc, 300, 10

LineTo Forml.hdc, 300, 300

LineTo Forml.hdc, 10, 300

LineTo Forml.hdc, 10, 10

Ellipse Forml.hdc, 10, 10, 300, 300

End Sub

Заливка замкнутых фигур

Очень полезным режимом (отсутствующим в Visual Basic) является режим заливки замкнутых фигур (областей). Можно легко нарисовать окружность и прямоугольник, залитые определенным цветом, но как быть с фигурами, контуры которых определяются пересечением базовых фигур (см. рис. 13.11)? Для заливки фигур неправильной формы необходимо использовать API-функцию ExtFloodFill().

Public Declare Function ExtFloodFill Lib "gdi32" _

Alias "ExtFloodFill" (ByVal hdc As Long, ByVal x As Long, _

ByVal у As Long, ByVal crColor As Long, ByVal _

wFillType As Long) As Long

Эта функция позволяет залить сплошную область, начинающуюся в точке с координатами (x, у) цветом, определенным параметром crColor.

Последний параметр (wFillType)

определяет тип заливки и может принимать одно из следующих значений.

•   FLOODFILLBORDER (0) - функция выполняет заливку области цветом crColor. Точка (х, у) должна находиться в пределах закрашиваемой области.

•   FLOODFILLSURFACE (1) - параметр cIColor определяет только цвет обрамления.

Поскольку область заливается с помощью кисти, сначала необходимо создать объект Brush, затем выбрать его в контекст устройства и вызвать функцию ExtFloodFill(). Фигуры, появляющиеся на экране после щелчка на кнопке Draw Now (приложения Ellipse), содержат весьма причудливые области, для заливки которых применяется функция ExtFloodFill(). К этой программе добавлен небольшой фрагмент, позволяющий заливать замкнутые области цветом, выбранным пользо­вателем в диалоговом окне Color. Чтобы заполнить область, щелкните на кнопке Fill Color (в общем диалоговом окне Color) и выберите цвет заливки, а затем щелкните на точке, расположенной в пределах области, которую вы хотите залить. Заливка выполняется в обработчике события MouseUp, текст которого приведен ниже.

Программа 13.13. Заливка замкнутой области

Private Sub Form MouseUp(Button As Integer, Shift As Integer, _

x As Single, у As Single)

brush = CreateSolidBrushe(CommonDialogI.Color)

SelectObject Me.hdc, brush

ExtFloodFill Me.hdc,

x, y, Me.point(x, y), FLOODFILLSURFACE

DeleteObject brush

End Sub

Программа извлекает информацию о выбранном цвете из элемента управления CommonDialogI и использует ее для создания сплошной кисти. Затем кисть выбирается в контекст устройства формы и вызывается функция ExtFloodFill(), с помощью которой выполняется заливка требуемой области.




Начало  Назад  Вперед



Книжный магазин