Рисование в окне элемента управления
Необходимо получить контекст отображения для окна элемента управления (например, панели)
/* 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); е определяет для перерисовывания все окно.
Дата добавления: 2019-02-08; просмотров: 579;