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

  • docx
  • 18.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002237.docx

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

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

 

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

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

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

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();

}

}

}


рис.6

 

 

Событие Paint


рис.7


рис.8

 

Когда вся клиентская область окна формы или часть этой области требует перерисовки, форме передается событие Paint.

 

Элементы управления выполняют обработку события Paint сами, пе- рерисовывая при необходимости свои окна.

 

// Демонстрация перерисовки содержимого экрана

// Программа выводит строку текста, прямоугольник и эллипс при

// обработке сообщения Paint.

 

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()); }

 

 

public string text = "Обработка события Paint";      // моя строка

 

private void Form1_Paint (object sender, Forms.PaintEventArgs e)

{

Graphics g = e.Graphics; /* е – ссылка на объект, имеющий свойства: - Graphics контекст устройства

- ClipRectangle границы области перерисовки

*/

g.Clear (Color.White);         // Закрасить окно белым цветом

 

/* Вывод строки text с использ. объекта Font и свойства Black

статич. класса System.Drawing.Brushes, в координатах 0,0 */ g.DrawString (text, new Font(”Arial”, 15), Brushes.Black, 0, 0);

 

/* Вывод незакрашенного прямоугольника в координатах 10,30 шириной 200 и высотой 100 пикселей с использ. пера - объекта Pen, инициализированного цветом Brushes.Green с шириной линий 2 пикселя */

g.DrawRectangle (new Pen(Brushes.Green,2), 10, 30, 200, 100);

 

// Вывод незакрашенного эллипса

g.DrawEllipse (new Pen(Brushes.Red,8), 150, 120, 100, 130);

}

}

 

1.

Graphics g = e.Graphics;      e определяет только часть окна для пе- рерисовки.

 

2.

Graphics g = Graphics.FromНwnd (this.Handle);   е определяет для пе- рерисовывания все окно.