- •Пространство имен System.Drawing
- •7 Сеансы вывода графики
- •8 Перехват события Paint
- •9 Метод Invalidate
- •11 Вывод графических объектов без события Paint
- •14Система координат. Альтернативные единицы измерения
- •Перенос начала координат
- •15 Цвет
- •19 Перечисления Drawing.Drawing2d
- •18 Пространство имен System.Drawing.Drawing2d
- •Кисти и краски
- •Паутина Безье
- •Событие Paint
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 |
Определяет интерполяцию между конечными точками. Используются значения из соответствующего перечисления |
