Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 12. Рисование.doc
Скачиваний:
43
Добавлен:
02.04.2015
Размер:
324.1 Кб
Скачать

2. В окне New Project выберите шаблон Windows Application, назовите новый про-

ект ControlTest.vb (или ControlTest.cs) и щелкните ОК.

3. В меню Project выберите команду Add New Item — откроется одноименное диа-

логовое окно.

4. В диалоговом окне Add New Item выберите Custom Control, назовите новый эле-

мент управления соответственно PrettyClock.vb или (PrettyClock.cs) и щелкните

Open к проекту будет добавлен новый нестандартный элемент управления.

5. В окне Solution Explorer щелкните правой кнопкой элемент управления Pretty-

Clock и выберите из контекстного меню команду View Code откроется окно

Code. Обратите внимание, что метод OnPaint переопределен и содержит вместо

реализации заглушку и комментарий, указывающий, что сюда нужно добавить

код, выполняющий визуализацию.

Теперь пора писать код. Наш элемент управления будет отображать текущее вре-

мя в прямоугольной области экрана. Для его прорисовки применяется метод Linear-

GradieniBrush, поддерживающий интересные графические эффекты. Вы также реа-

лизуете у своего элемента управления свойства, позволяющие разработчикам уп-

равлять его обликом Е период выполнения.

1. В окне редактора кода поместите в начало кода следующие операторы, импор-

тирующие пространства имен Sysfem. Drawing и System.Drawing. Drawing2D:

Visual Basic .NET

Imports System. Drawing

Imports System. Drawing. Drawing2D

Visual C#

// В С# опеэатор "using System. Drawing; ' добавлен по умолчанию

using System. Drawing. Drawing2D;

2. Добавьте свойства, хранящие описание цвета. Оно, вместе со свойством Fore-

Color, унаследованным от базового класса, предназначено для создания объекта

LinearGradient Brush, визуализирующего нестандартный элемент управления. Вот

примерный код этого свойства:

Visual Basic .NET

Объявить закрытую переменную для хранения значения Color.

Private rriForeColorTwo As Color

Это реализация свойства.

Public Property ForeColorTwo() As Color

Get

Return mForeColorTwo

End Get

Set(ByVal Value As Color)

mForeColorTwo - Value

End Set

End Property

Visual C#

// Объявить закрытую переменную для хранения значения Color,

orivate Color mForeColorTwo;

// Это реализация свойства.

public Color ForeColorTwo

{

g -

{

return mForeColorTwo;

;

set

{

mForeColorTwo = value;

3. Добавьте свойство Angle типа Single (float) для хранения значения угла, необхо-

димого методу LinearGradient Brush. Поскольку его значение выражается в граду-

сах, потребуется код, проверяющий, что введенное значение не меньше 0 и не

больше 360. Вот код этого свойства:

338 Создание элементов управления с помощью .NET Framework Глава 7

Visual Basic .NET

Private mAngle As Single

Public Property Angle{) As Single

Get

Return mAngle

End Get

Set(8yVal Value As Single)

' Такая схема устанавливает минимальное значение при попытке

' ввести слишком большее значение и наоборот. Это обеспечивает

1 непрерывное приращение значения свойства.

If Value > 360 then

mAngle = О

Elself Value < 0 then

TiAngle = 360

Else

mAngle = Value

End If

End Set

End Property

Visual C#

private float mAngle;

public float Angle

{

get

!

return rnAngle;

}

set

!

// Такая схема устанавливает минимальное значение при попытке

// ввести слишком большее значение и наоборот. Это обеспечивает

// непрерывное приращение значения свойства,

if (value > 360)

mAngle = 0;

else if (value < 0)

mAngle = 360;

else

mAngle = value;

>

:

4. Добавьте в метод OnPaint код, создающий объект LinearGradient Brush и отобра-

жающий текущее время с помощью объекта Font. Для создания объекта Linear-

GradientBrush вам потребуются свойства Size, ForeColom ForeColorTwo, которые

можно использовать так:

Visual Basic .NET

Создать представляющий элемент управления прямоугольник, заданный

точкой верхнего левого угла и свойством Size.

Dim ControlRectangle As New Rectangle(New PointfO, 0), Me.Size)

Создать новый объект LinearGradientBrush, определяющий переход

между цветами ForeColor и ForeColorTwo с учетом заданного угла,

Dim myBrusn As New LinearGradientBrush(ControlRectangle,

ForeColor, ForeColorTwo, Angle)

Создать объект GraphicsPath, хранящий отображаемый текст,

Dim myPath As New GraphicsPathO

Записать в объект GraphicsPath строку, представляющую текущее время.

TiyPath. AddSt ring (Now. ToLongTimeSt ring ()r Font. FontFamily,

Font.Style, Font.Size, New PointfO. 0).

StringFormat.GenericDefault)

Показать Graphics,

pe.Graphics.FillPath(my6rush, myPath)