Графический редактор

We use cookies. Read the Privacy and Cookie Policy

Графический редактор

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

Весь код программы сводится к обработке событий мыши MouseDown, MouseMove и MouseUp. В принципе, приемы создания графических эффектов ничем не отличаются от соответствующих приемов, применяемых на обычных персональных компьютерах. Я взял два примера из своей книги «Занимательное программирование на Visual Basic .NET» и перенес код в проект с учетом синтаксиса языка С#, что иллюстрирует листинг 6.22.

Листинг 6.22

private int x_md, y_md;

Pen myPen = new Pen(Color.LightBlue);

private bool bPaint;

Graphics g;

private Pen erasePen;

private Point ptsStart;

private Point ptsPrevious;

private Point ptsCurrent;

private void Form1_MouseDown(object sender, MouseEventArgs e) {

 // Начинаем рисование

 bPaint = true;

 if (mnuLines.Checked) {

  ptsStart.X = e.X;

  ptsStart.Y = e.Y;

  ptsPrevious = ptsStart;

 }

 if (mnuPaint.Checked) {

  // координаты стилуса при нажатии

  x_md = e.X;

  y_md = e.Y;

 }

}

private void Form1_MouseMove(object sender, MouseEventArgs e) {

 if (bPaint) {

  if (mnuLines.Checked) {

   ptsCurrent.X = e.X;

   ptsCurrent.Y = e.Y;

   g = CreateGraphics();

   g.DrawLine(erasePen, ptsStart.X, ptsStart.Y, ptsPrevious.X, ptsPrevious.Y);

   g.DrawLine(myPen. ptsStart.X, ptsStart.Y, ptsCurrent.X, ptsCurrent.Y);

   ptsPrevious = ptsCurrent;

   g.Dispose();

  }

  if (mnuPaint.Checked) {

   g = CreateGraphics();

   int x_mm = e.X;

   int y_mm = e.Y;

   g.DrawLine(myPen, x_md, y_md, x_mm, y_mm);

   x_md = x_mm;

   y_md = y_mm;

   g.Dispose();

  }

 }

}

private void Form1_MouseUp(object sender, MouseEventArgs e) {

 bPaint = false;

}

private void mnuClear_Click(object sender, EventArgs e) {

 g = CreateGraphics();

 g.Clear(this.BackColor);

 g.Dispose();

}

private void Form1_Load(object sender, EventArgs e) {

 erasePen = new Pen(this.BackColor);

}

private void mnuPaint_Click(object sender, EventArgs e) {

 mnuPaint.Checked = !mnuPaint.Checked;

 mnuLines.Checked = !mnuLines.Checked;

}

private void mnuGreenPen_Click(object sender, EventArgs e) {

 myPen.Color = Color.Green;

}

private void mnuRedPen_Click(object sender, EventArgs e) {

 myPen.Color = Color.Red;

}

На рис. 6.9 показано, как выглядит созданный графический редактор в работе.

Рис. 6.9. Простейший графический редактор