Сеансы Paint

Наиболее распространенный способ получения объекта Graphics состоит в обработке события Paint. Вспомните из предыдущей главы, что класс Control определяет виртуальный метод по имени OnPaint (). Когда вы хотите, чтобы Form визуализировал графические данные на своей поверхности, можете переопределить этот метод и извлечь объект Graphics из входного параметра PaintEventArgs. Для иллюстрации создайте новое приложение Windows Forms по имени BasicPaintForm и обновите класс-наследник Form следующим образом:

public partial class MainForm: Form

{

public MainForm()

{

InitializeComponent();

CenterToScreen();

this.Text = "Basic Paint Form";

}

protected override void OnPaint(PaintEventArgs e)

{

// Переопределяя OnPaint(), не забудьте вызвать реализацию базового класса.

base.OnPaint(e);

// Получить объект Graphics из входящего PaintEventArgs.

Graphics g = e.Graphics;

// Визуализировать текстовое сообщение в заданном шрифте и цвете.

g.DrawString("Hello GDI+", new Font("Times New Roman", 20), Brushes.Green, 0, 0);

}

}

Хотя переопределение OnPaint () допустимо, более распространенный способ обработки события Paint предусматривает использование ассоциированного делегата PaintEventHandler (фактически это поведение по умолчанию, принятое в Visual Studio при обработке событий через окно Properties). Этот делегат может указывать на любой метод, принимающий в первом параметре System.Object, а во втором — PaintEventArgs. Если имеется обработанное событие Paint (через дизайнер Visual Studio, или вручную в коде), то можно извлечь объект Graphics из входящего параметра PaintEventArgs. Вот необходимое изменение:

public partial class MainForm: Form

{

public MainForm()

{

InitializeComponent();

CenterToScreen();

this.Text = "Basic Paint Form";

// Visual Studio помещает этот код внутрь InitializeComponent().

this.Paint += new PaintEventHandler(MainForm_Paint);

}

private void MainForm_Paint(object sender, PaintEventArgs e)

{

Graphics g = e.Graphics;

g.DrawString("Hello GDI+", new Font("Times New Roman", 20),

Brushes.Green, 0, 0);

}

}

Независимо от того, как вы реагируете на событие Paint, имейте в виду, что всякий раз, когда окно становится “грязным”, инициируется событие Paint. И как вам должно быть известно, окно считается “грязным” всякий раз, когда изменяется его размер, оно перекрывается другим окном (полностью или частично) и потом открывается, либо сворачивается и затем восстанавливается. Во всех этих случаях. NET гарантирует, что если форма нуждается в перерисовке, обработчик события Paint (или переопределенный метод OnPaint ()) вызывается автоматически.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: