Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 3-4 - Графический интерфейс.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
261 Кб
Скачать
☆

7 Сеансы вывода графики

public class MainForm : Form

{

public MainForm()

{

CenterToScreen();

this.Text = "Basic Paint Form";

}

public static void Main(string[] args)

{

Application.Run(new MainForm());

}

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawString("HelloGDI+", new Font("Times New Roman", 20),

new SolidBrush(Color.Black), 0, 0);

}

}

8 Перехват события Paint

public class MainForm : Form

{ public MainForm()

{

...

// Добавляем обработчик события

this.Paint += new System.Windows.Forms.PaintEventHandler(MainForm_Paint);

}

// Обратите внимание на сигнатуру обработчика событий

public void MainForm_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

...

}

public static void Main(string[] args)

{ Application.Run(new MainForm());

}

9 Метод Invalidate

Перерисовка формы вручную (программным образом поместить в очередь сообщение о необходимости перерисовки)

public class MainForm : Form

{

...

private void MainForm_Paint(object sender, PaintEventArgs e)

{

Graphics g = g.Graphics;

// Логика для вывода изображения

...

}

private void GetNewBitmap()

{

// Выводим окно диалога и получаем выбранное пользователем изображение

...

// А теперь перерисовываем клиентскую часть формы

Invalidate();

}

}

Существует множество перегруженных вариантов метода Invalidate(). Например, можно указать конкретную прямоугольную область, подлежащую перерисовку, вместо всей клиентской части формы (по умолчанию).

10

private void UpdateUpperArea()

{

Rectangle r = new Rectangle(10,10,100,100);

Invalidate(r);

}

11 Вывод графических объектов без события Paint

Объект Graphics можно получить при помощи метода Graphics.FromHwnd(). Передаваемый параметр – значение свойства Handle, определенного в классе Control и наследуемого всеми производными классами.

private void MainForm_MouseDown(object sender, MouseEventArgs e)

{

// Получаем объект Graphics

Graphics g = Graphics.FromHwnd(this.Handle);

// В ответ на щелчок мыши рисуем кружок

g.DrawEllipse(new Pen(Color.Green), e.X, e.Y, 10, 10);

}

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

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

12

public class MainForm : System.Windows.Forms.Form

{

// Коллекция для хранения координат всех кружков

private ArrayList myPts = new ArrayList();

...

private void NainForm_MouseDown(object sender, MouseEventArgs e)

{

// Получаем объект Graphics

Graphics g = Graphics.FromHwnd(this.Handle);

// Раньше мы рисовали кружки по щелчку мыши:

// g.DrawEllipse(new Pen(Color.Green), e.X, e.Y, 10, 10);

// А теперь мы просто добавляем координаты указателя при щелчке

// в коллекцию и вызываем Invalidate()

myPts.Add(new Point(e.X, e.Y));

Invalidate();

}

private void MainForm_paint(object sender, PaintEventargs e)

{

Graphics g = e.Graphics;

g.DrawString("Hello CDI+", new Font("Times New Roman", 20),

new SolidBrush(Color,Black), 0, 0);

// Выводим все точки

foreach(Point p in myPts)

g.DrawEllipse(new Pen(Color.Green), p.X, p.Y, 10, 10);

}

}

Возможности класса Graphics

Все возможности вывода изображений сосредоточены в Graphics. Можно считать этот класс неким виртуальным устройством, на которое производится вывод графики (в Win32 можно считать аналогом HDC – Hanlled to Device Context).

13

Метод

Назначение

FromHdc(), FromHwnd(), FromImage()

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

Clear()

Заполняет объект выбранным пользователем цветом, удаляя его предыдущее содержание

DrawArc(),

DrawBezier(), DrawBeziers(), DrawCurve(),

DrawEllipse(),

DrawIcon(),

DrawLine(),

DrawLines(),

DrawPie(),

DrawPath(),

DrawRectangle(), DrawRectangles(),

DrawString()

Методы вывода изображений и геометрических фигур

FillEllipse(), FillPath(), FillPie(), FillPolygon(), FillRectangle()

Методы для заполнения внутренних областей графических объектов

MesureString()

Возвращает структуру Size, представляющую границы блока текста

Свойства класса Graphics

Свойство

Назначение

Clip

Graphics

ClipBounds

VisibleClipBounds

IsClipEmpty

IsVisibleClipEmpty

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

Transform

Для проведения преобразований координат

PageUnit

PageScale

DpiX

DpiY

Позволяют задать «место происхождения» операции вывода графического объекта и единиц измерения

SmoothingMode

PixelOffsetMode

TextRenderingHint

Позволяют задать плавность перехода для геометрических объектов. Устанавливаются при помощи значений из соответствующих перечислений, определенных в пространствах имен System.Drawing и System.Drawing.Drawing2D

CompositingMode

Определяет, будет ли выводимый графический объект выводиться над фоном или будет производиться смешение с фоном.

CompositingQuality

Определяет параметры процесса смешивания.

InterpolationMode

Определяет интерполяцию между конечными точками. Используются значения из соответствующего перечисления