Программирование >>  Программирование с использованием ajax 

1 ... 342 343 344 [ 345 ] 346 347 348 ... 396


Рисование форм с использованием класса Brush

Следующий пример демонстрирует использование класса Brush (кисть) для рисования таких форм, как прямоугольники, эллипсы, сектора и многоугольники. Класс Brush - абстрактный базовый класс. Для создания экземпляров объекта Brush применяются такие производные от Brush классы, как SolidBrush, TextureBrush и LinearGradientBrush.

Классы Brush и SolidBrush определены в пространстве имен System.Drawing. Однако классы TextureBrush и LinearGradientBrush принадлежат пространству имен System. Drawing. Drawing2D. Классы кистей предоставляют перечисленные ниже возможности.

□ SolidBrush выполняет заливку формы чистым цветом.

□ TextureBrush выполняет заливку формы растровым изображением. При создании этой кисти указывают также ограничивающий прямоугольник и режим укладки. Ограничивающий прямоугольник указывает, какая часть растрового изображения применяется для кисти - вовсе не обязательно использовать все растровое изображение, если это не требуется. Режим укладки обладает рядом опций, включая Tile (Плитка), которая вызывает укладку текстуры в виде плитки, и TileFlipX, TileFlipY и TileFlipXY, которые вызывают укладку изображения в виде плитки с переворотом при укладке последующих плиток. TextureBrush позволяет создавать очень интересные и впечатляющие эффекты.

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

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

Для объектов Brush всегда вызывайте метод Dispose ()

Как и при использовании объектов Graphics и Реп, для объектов Brush важно либо вызывать метод Dispose () по завершении работы с ними, либо использовать блок using. В противном случае приложение может истощать ресурсы Windows. В следующем практическом занятии мы с помощью кистей выполним заливку ряда форм.

Практическое занятие ИспОЛЬЗОВЭНИе КИСТИ

Чтобы увидеть кисти в действии, выполните следующие действия.

1. Создайте новое Windows-приложение по имени UsingBrushes в каталоге С:\

BegVCSharp\Chapter33.

2. В начальную часть кода добавьте следующую директиву using для класса LinearGradientBrush из пространства имен System.Drawing.Drawing2D:



using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System. Drawing. Drawing2D;

3. В конструктор класса Forml после вызова метода InitializeComponent () добавьте вызов метода SetStyle():

public FormlО {

InitializeComponent ();

SetStyle(ControlStyles.Opaque, true);

4. Добавьте в свой класс метод OnPaint ():

protected override void OnPaint(PaintEventArgs e) {

Graphics g = e.Graphics;

g.FillRectangle(Brushes.White, ClientRectangle); g.FillRectangle(Brushes.Red, new Rectangle (10, 10, 50, 50));

Brush linearGradientBrush = new LinearGradientBrush (

new Rectangle (10, 60, 50, 50), Color.Blue, Color.White, 45); g.FillRectangle(linearGradientBrush, new Rectangle (10, 60, 50, 50));

Вызов метода Dispose() вручную. linearGradientBrush.Dispose();

g.FillEllipse(Brushes.Aguamarine, new Rectangle(60, 20, 50, 30)); g.FillPie(Brushes.Chartreuse, new Rectangle (60, 60, 50, 50), 90, 210); g.FillPolygon(Brushes.BlueViolet, new Point[] {

new Point (110, 10) ,

new Point (150, 10),

new Point (160, 40),

new Point (120, 20),

new Point (120, 60),

5. После компиляции и запуска этой программы ее результат будет подобен показанному на рис. 33.10.


Рис. 33.10. Использование кистей



Описание полученных результатов

Прежде всего, обратите внимание на вызов метода SetStyle () в конструкторе формы. Он является методом класса Form:

SetStyle(ControlStyles.Opaque, true);

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

Подобно классу Pens класс Brushes содержит свойства для получения приблизительно 150 кистей - по одной для каждого заранее определенного цвета. Именно этот класс применяется для получения большинства кистей рассматриваемого примера, за исключением кисти LinearGradientBrush, которую мы создадим самостоятельно.

Первый вызов метода FillRectangle () выполняет прорисовку фона клиентской области окна:

g.FillRectangle(Brushes.White, ClientRectangle);

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

Brush LinearGradientBrush = new LinearGradientBrush (

new Rectangle(10, 60, 50, 50), Color.Blue, Color.White, 45); g.FillRectangle(linearGradientBrush, new Rectangle(10, 60, 50, 50)); linearGradientBrush.Dispose() ;

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

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

Следующий пример использует класс Font (шрифт) для прорисовки текста. Класс Font инкапсулирует три основных характеристики шрифта: семейство шрифта, его размер и стиль. Класс Font определен в пространстве имен System. Drawing.

В соответствии с документацией .NET, семейство шрифта обобщает группу гарнитур шрифтов, обладающих аналогичным базовым начертанием . Это определение - несколько усложненное утверждение того, что семейства шрифтов представляют собой такие группы схожих шрифтов, как Courier, Arial или Times New Roman.

Свойство Size представляет размер гарнитуры шрифта. Однако в среде .NET Framework этот размер - не обязательно размер в пунктах. Он может быть размером в пунктах, но при желании свойство GraphicsUnit, определяющее единицу измерения размера шрифта, можно изменить с помощью свойства Unit. Вспомните, что один пункт равен 1/72 дюйма - т.е. высота шрифта размером в 10 пунктов составляет 1/72 дюйма. Посредством перечисления GraphicsUnit в качестве единицы изменения шрифтов можно указывать одну из следующих:



1 ... 342 343 344 [ 345 ] 346 347 348 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика