Рисование в окне элемента управления
Необходимо получить контекст отображения для окна элемента управления (например, панели)
/* 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); е определяет для пе- рерисовывания все окно.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.