[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Приложение Windows Forms: простая графика
Neo Дата: Воскресенье, 16.02.2014, 22:16 | Сообщение 1

Текст программы (текст модуля Form1.cs)
Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace my6Graphics
{
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }

         private void Form1_Paint(object sender, PaintEventArgs e)
         {
             Bitmap bm2 = new Bitmap(@".\kadr4.JPG", true);
             Color clr1, clr2;
             clr1 = Color.FromArgb(200, 220, 220);
             clr2 = Color.FromArgb(254, 0, 0);
             Graphics gr1 = CreateGraphics();
             gr1.Clear(clr1);

             gr1.DrawImage(bm2, new PointF(10, 10));
             Pen pn1 = new Pen(clr2);
             pn1.Width = 4;
             gr1.DrawEllipse(pn1, 20, 80, 200, 100);
             pn1.Dispose();
             Font font1 = new Font("Arial", 12);
             gr1.DrawString("Arial Font", font1, Brushes.White,  
             new PointF(50, 110));

             String drawString = "Sample Text";

             // Create font and brush.
             Font drawFont = new Font("Arial", 16);
             SolidBrush drawBrush = new SolidBrush(Color.White);
             SolidBrush fillBrush = new SolidBrush(Color.Green);

             // Create rectangle for drawing.
             float x = 150;   // 150.0F  
             float y = 200;
             float width = 200;
             float height = 50;
             RectangleF drawRect = new RectangleF(x, y, width, height);

             // Draw rectangle to screen.
             Pen blackPen = new Pen(Color.Yellow);
             blackPen.Width = 3;
             gr1.DrawRectangle(blackPen, x, y, width, height);

             gr1.FillRectangle(fillBrush, drawRect);

             // Draw string to screen.
             gr1.DrawString(drawString, drawFont, drawBrush, drawRect);
             gr1.Dispose();
         }
     }
}


Обсуждение
  • Все действия выполняются в методе Form1_Paint - обработчике события OnPaint формы. Этот метод вызывается, когда нужно перерисовать форму, т е при первом показе формы, изменении её размеров, при ликвидации препятствия, закрывавшего всю или часть формы и т п.
  • Рассмотрим код этого метода построчно, сверху - вниз
  • Bitmap bm2 = new Bitmap(@".\kadr4.JPG", true); - создаётся переменная (объект) bm2 класса Bitmap. При этом в неё загружается картинка, находящаяся в файле kadr4.JPG той папки, где исполняемый файл (в данном случае D:\XRAN_MY_PROGS\0_vis_stud\my0_7_2Graphics\bin\Debug\). Символ @ перед строкой указывает, что обратный слэш \ в этой строке не является специальным форматирующим символом (а является обычным элементом строки). Символы .\ обозначают текущую папку. Возможно, правильнее получить имя этой папки из свойства System.Windows.Forms.Application.StartupPath
  • Color clr1, clr2; - Объявляются переменые clr1, clr2 класса Color
  • clr1 = Color.FromArgb(200, 220, 220); - переменной clr1 присваивается конкретный цвет (яркость красного = 200, зелёного = 220, синего - 220)
  • clr2 = Color.FromArgb(254, 0, 0); - аналогично: переменной clr2 присваивается ярко-красный цвет
  • Graphics gr1 = CreateGraphics() - можно было написать Graphics gr1 = Form1.CreateGraphics(). Создаётся переменная gr1 класса Graphics, причём она связана с поверхностью формы Form1.
  • gr1.Clear(clr1) - очищаю окно формы (заливаю фоновым цветом clr1, используя метод Clear объекта gr1)
  • gr1.DrawImage(bm2, new PointF(10, 10)) - картинка, хранящаяся в объекте bm2 помещается на форму с помощью метода DrawImage объекта gr1. (Для этого не обязательно использовать объект класса Bitmap, можно например, объект класса Image)
  • Pen pn1 = new Pen(clr2) - создаю перо (объект pn1 класса Pen), необходимое для вычерчивания эллипса
  • pn1.Width = 4 - устанавливаю ширину пера (толщину линии) = 4
  • gr1.DrawEllipse(pn1, 20, 80, 200, 100) - вычерчиваю эллипс, вписанный в прямоугольник с координатами левого верхнего угла: x=20, y=80, шириной w=200, высотой h=100 пером pn1
  • pn1.Dispose() - удаляю объект pn1. Это не обязательно, так как его автоматически удалит сборщик мусора
  • Font font1 = new Font("Arial", 12) - создаётся объект font1 класса Font (шрифт): Arial, размер 12pt. Однако можно обойтись без font1. В этом случае следующая строка должна выглядеть так:
    gr1.DrawString("Arial Font", new Font("Arial", 12), Brushes.White, new PointF(50, 110));
  • gr1.DrawString("Arial Font", font1, Brushes.White, new PointF(50, 110)) - вывожу строку "Arial Font" шрифтом font1 белым (Brushes.White) цветом, причём левый верхний угол строки имеет координаты: x=50, y=110
  • String drawString = "Sample Text" - объявляю переменную drawString класса String и присваиваю ей значение Sample Text
  • Font drawFont = new Font("Arial", 16) - создаю объект drawFont класса Font (шрифт) размером 16pt, Arial
  • SolidBrush drawBrush = new SolidBrush(Color.White) - создаю объект drawBrush класса SolidBrush ("кисть для сплошных линий") белого цвета (Color.White)
  • SolidBrush fillBrush = new SolidBrush(Color.Green) - аналогично, кисть fillBrush зелёного цвета
  • float x = 150; float y = 200; float width = 200; float height = 50; - описаны переменные x,y - координаты верхнего левого угла прямоугольника; width, height - его ширина и высота. Заданы значения этих переменных.
  • RectangleF drawRect = new RectangleF(x, y, width, height) - создаю объект drawRect класса RectangleF (прямоугольник) с параметрами, указанными в предыдущем пункте
  • Pen blackPen = new Pen(Color.Yellow) - создаю объект blackPen класса Pen (перо) желтого цвета (Color.Yellow)
  • blackPen.Width = 3 - задаю: толщина линий этого пера = 3 пиксела
  • gr1.DrawRectangle(blackPen, x, y, width, height) - рисую на поверхности формы заданный прямоугольник заданным пером (то есть желтую рамку толщиной 3 пиксела)
  • gr1.FillRectangle(fillBrush, drawRect) - заливаю этот же прямоугольник внутри цветом fillBrush, т е зелёным
  • gr1.DrawString(drawString, drawFont, drawBrush, drawRect) - помещаю на форму строку drawString (т е Sample Text) написанную шрифтом drawFont (т е Arial, 16pt ), цветом drawBrush (т е белым), внутри прямоугольника drawRect

Примечания
Можно сделать вывод, что для разработки программ необходимо ориентироваться в свойствах и методах классов
Рассмотрим, например, какие нужные для этой программы классы находятся в пространстве имён System.Drawing. Для этого в редакторе кода запишем такой комментарий:
// System.Drawing затем выделим System.Drawing и нажмём клавишу F1. (Справочная система должна быть налажена). Увидим классы (и структуры): Bitmap, Color, Font, Graphics, Pen, PointF, Rectangle, RectangleF, SolidBrush - то есть всё необходимое для программы. Щёлкнув далее, например - Color, увидим описание этой структура и ссылки, по которым можно увидеть её свойства и методы.
В рамках этой программы классы и структуры - одно и то же.

Статус: Neo
  • Страница 1 из 1
  • 1
Поиск: