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

lec

.pdf
Скачиваний:
25
Добавлен:
24.03.2015
Размер:
3.43 Mб
Скачать

Так как контекстное меню было установлено для ЭУ notifyIcon1, то двойной щелчок мышки на иконке в области уведомлений выводит пункты "Показать" и "Скрыть":

рис.5

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

391

ВВЕДЕНИЕ В ГРАФИКУ

1. Интерфейсы GDI и GDI+

GDI – интерфейс графических устройств. Входит в состав Windows. Обеспечивает независимость Windows от графических устройств.

Прог-

 

 

GUI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рам-

 

 

 

 

 

 

 

ма

 

 

 

 

 

 

 

Видео-

 

GDI

 

 

 

Видео-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

драйвер

 

система

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рис.1

GDI+ - объектно-ориентированная подсистема. Состоит из набора базовых классов .NET и опирается на GDI.

Реализована в пространстве имен

System.Drawing.

При-

Библиотека

ло-

классов FCL

жение

GDI+

 

 

Windows

 

GDI

 

 

Graphics

DC

 

 

 

 

рис.2

Принтер, плоттер, память

видеодрайвер дисплей

2. Контекст устройства (DC) и контекст отображения

(Graphics).

392

 

 

Принтер,

Что рисовать

 

плоттер,

Параметры

 

память

 

 

функции ри-

видео-

 

+

дисплей

драйвер

 

Как рисовать

 

 

Graphics DC

(GDI+)

рис.3

Система координат по умолчанию (в пикселях)

рис.4

Класс Graphics шире DC. Класс реализует и свойства, и инструменты для рисования в контексте DC.

Пример метода рисования прямоугольника: g.FillRectangle (Brush, Х, У, width, height);

здесь g - объект класса Graphics - контекст отображения.

3. Перья

393

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

public Pen (Color);

 

public Pen (Color, float);

// Цвет + толщина

public Pen (Brush);

// На основе кисти

public Pen (Brush, float);

 

public Pen (Color.FromArgb(255,155,100) ); // Оранжевое

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

Свойства пера

Свойство

Описание

Alignment

Выравнивание пера

Width

Ширина линии

Brush

Кисть, используемая пером

Color

Цвет пера

DashStyle

Стиль пунктирных и штрихпунктирных линий

DashCup

Вид точек и штрихов пунктирных и штрихпунк-

 

тирных линий

DashOffset

Расстояние от начала линии до начала штриха

DashPattern

Массив шаблонов для создания произвольных

 

штрихов и пробелов штриховых и штрихпунктир-

 

ных линий

StartCup

Стиль концов линий

EndCup

 

LineCap

Формы концов линий

LineJoin

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

MiterLimit

Предельная толщина в области соединения ост-

 

роконечных линий

Пример:

Color color;

 

color = Color.Black

 

pen = new Pen(color, 2);

 

color = Color.White

 

pen = new Pen(color, 4);

4. Кисти

Внутренняя область окна и замкнутых геометрических фигур может быть закрашена при помощи кисти. Кисти создаются на базе классов, производных от абстрактного класса Brush. Это следующие классы:

Brushes;

SolidBrush;

HatchBrush;

TextureBrush;

LinearGradientBrush;

394

PathGradientBrush.

Кисть стандартного цвета.

Brush brB = Brushes.Blue;

Brush brR = Brushes.Red;

Кисть для сплошной закраски:

Brush solidBaige = new SolidBrush(Color.Baige);

Brush solidOrangy = new SolidBrush(Color.FromArgb(255,155,100) ); // Оранжевая

Кисти типа HatchBrush - прямоугольная кисть

заданного стиля с заданным цветом изображения и фона.

Кисти типа TextureBrush – текстурная кисть, может иметь любой внешний вид и любой цвет.

Градиентные кисти - обеспечивают плавное изменение интенсивности цвета.

Члены класса Brushes.

Все перечисленные в таблице открытые свойства возвращают объект Brush, определенный системой

AliceBlue

GhostWhite

NavajoWhite

AntiqueWhite

Gold

Navy

Aqua

Goldenrod

OldLace

Aquamarine

Gray

Olive

Azure

Green

OliveDrab

Beige

GreenYellow

Orange

Bisque

Honeydew

OrangeRed

Black

HotPink

Orchid

BlanchedAlmond

IndianRed

PaleGoldenrod

 

 

Blue

Indigo

PaleGreen

BlueViolet

Ivory

PaleTurquoise

Brown

Khaki

PaleVioletRed

BurlyWood

Lavender

PapayaWhip

CadetBlue

LavenderBlush

PeachPuff

Chartreuse

LawnGreen

Peru

Chocolate

LemonChiffon

Pink

Coral

LightBlue

Plum

CornflowerBlue

LightCoral

PowderBlue

Cornsilk

LightCyan

Purple

Crimson

LightGoldenrodYellow

Red

 

 

Cyan

LightGray

RosyBrown

DarkBlue

LightGreen

RoyalBlue

DarkCyan

LightPink

SaddleBrown

DarkGoldenrod

LightSalmon

Salmon

395

DarkGray

LightSeaGreen

SandyBrown

DarkGreen

LightSkyBlue

SeaGreen

DarkKhaki

LightSlateGray

SeaShell

DarkMagenta

LightSteelBlue

Sienna

DarkOliveGreen

LightYellow

Silver

DarkOrange

Lime

SkyBlue

DarkOrchid

LimeGreen

SlateBlue

DarkRed

Linen

SlateGray

DarkSalmon

Magenta

Snow

DarkSeaGreen

Maroon

SpringGreen

DarkSlateBlue

MediumAquamarine

SteelBlue

 

 

DarkSlateGray

MediumBlue

Tan

DarkTurquoise

MediumOrchid

Teal

DarkViolet

MediumPurple

Thistle

DeepPink

MediumSeaGreen

Tomato

DeepSkyBlue

MediumSlateBlue

Transparent

DimGray

MediumSpringGreen

Turquoise

 

 

DodgerBlue

MediumTurquoise

Violet

Firebrick

MediumVioletRed

Wheat

FloralWhite

MidnightBlue

White

ForestGreen

MintCream

WhiteSmoke

Fuchsia

MistyRose

Yellow

Gainsboro

Moccasin

YellowGreen

5. Создание контекста отображения

Контекст отображения – это объект класса Graphics.

1. Для рабочей области:

Graphics g = Graphics.FromНwnd (this.Handle);

или

Graphics g =this.CreateGraphics();

this.CreateGraphics() – возвращает объект класса Graphics (контекст отображения).

2. Для элемента управления:

Graphics g = Graphics.FromНwnd (<Эл.управления>.Handle);

или

Graphics g =<Эл.управления>.CreateGraphics();

Пример. Graphics g = panel1.CreateGraphics();

В обработчике событий

Form1_Paint (object sender, Forms.PaintEventArgs e)

Graphics g = e.Graphics;

396

Примечание. Такой контекст устройства делает доступным для перерисовки только реально «испорченную» часть окна.

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

Пример 1. Рисование траектории перемещения курсора при нажатой кнопке мыши.

//Move_Veer – первая программа с графикой.

//Программа рисует траекторию перемещения курсора мыши при

//нажатой клавише и перестает рисовать траекторию при

//отпускании клавиши.

//Способ рисования: при перемещении курсора поступает

//сообщение Move c координатами курсора,

//в которые выводится квадрат со стороной 4 пикселя.

using System;

using System.Drawing;

using System.Windows.Forms;

public class Form1 : Forms.Form

{

private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); }

protected override void Dispose( bool disposing )

{if( disposing )

if (components != null) { components.Dispose(); } base.Dispose( disposing );

}

+ Windows Form Designer generation code

static void Main()

{ Application.Run(new Form1()); }

bool doDraw = false; // клавиша мыши отпущена

private void Form1_MouseDown (object sender, MouseEventArgs e) { doDraw = true; } // клавиша нажата

private void Form1_MouseUp (object sender, MouseEventArgs e) { doDraw = false; } // клавиша отпущена

private void Form1_MouseMove (object sender, MouseEventArgs e) // e – объект, определяющий координаты курсора (е.X, е.Y)

{

if (doDraw)

{

Graphics g = this.CreateGraphics();

/* Создать объект redBrush – сплошная кисть красного цвета. Color – структура System.Drawing.Color */

397

SolidBrush redBrush = new SolidBrush (Color.Red);

/* Вывод закрашенного прямоугольника в координатах e.X, e.Y шириной 4 и высотой 4 пикселя с использ. кисти redBrush */ g.FillRectangle (redBrush, e.X, e.Y, 4, 4);

g.Dispose();

}

}

}

6. Добавление обработчиков событий

События

рис.5

7. Рисование в окне элемента управления

Необходимо получить контекст отображения для окна элемента управления (например, панели)

/* Graphics_Panel – вторая программа с графикой .

Программа рисует в панели траекторию перемещения курсора мыши при нажатой клавише и перестает рисовать траекторию при отпускании клавиши.

398

Способ рисования: при перемещении курсора в окне панели поступает сообщение Move с координатами курсора, в которые выводится круг диаметром 10 пикселей.

Отличия от программы Graphics_Move показаны жирным шрифтом.

*/

using System;

using System.Drawing;

using System.Windows.Forms;

public class Form1 : Forms.Form

{

private System.ComponentModel.Container components = null;

public Form1() { InitializeComponent(); }

protected override void Dispose( bool disposing )

{if( disposing )

if (components != null) { components.Dispose(); } base.Dispose( disposing );

}

+ Windows Form Designer generation code

static void Main()

{ Application.Run(new Form1()); }

bool doDraw = false;

// клавиша мыши отпущена

private void

panel1_MouseDown(object sender, MouseEventArgs e)

{

doDraw = true; }

// клавиша нажата

private void

panel1_MouseUp (object sender, MouseEventArgs e)

{

doDraw = false; }

// клавиша отпущена

private void panel1_MouseMove(object sender, MouseEventArgs e)

{

if (doDraw)

{

Graphics g = panel1.CreateGraphics();

SolidBrush redBrush = new SolidBrush (Color.Red);

/* Вывод закрашенного эллипса в координатах e.X, e.Y

шириной 10 и высотой 10 пикселей с использ. кисти redBrush */ g.FillEllipse (redBrush, e.X, e.Y, 10, 10);

g.Dispose();

}

}

}

399

рис.6

Событие Paint

рис.7

400

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]