Бывает так, что вывод графического объекта необходимо произвести не в стандартных ситуациях, то есть не когда возникает событие Paint, а в ответ на другие события. Например, вывести маленький кружок в том месте, где на форме был сделан щелчок мышью. Первое, необходимо получить объект Graphics, а затем выполнить с этим объектом необходимые манипуляции. Объект Graphics можно получить при помощи метода Graphics.FromHwnd(). Обратите внимание, что единственный параметр, передаваемый этому методу, — это значение свойства Handle. Свойство Handle, определено в классе Control и наследуется всеми классами, производными от Control.
private void Form1_MouseDown(Object sender, MouseEventArgs e) {
// Получаем объект Graphics
Graphics g = Graphics.FromHwnd(this.Handle);
// Теперь в месте щелчка мышью рисуем кружок диаметром 10 пикселов
g.DrawEllipse(new Pen(Color.Green), e.X, e.Y, 10, 10);
}
При любой перерисовке формы все кружки, выведенные на форме после щелчков мышью, исчезнут. Чтобы информация о графических объектах сохранялась и использовалась при перерисовке формы самый простой способ — создать внутреннюю коллекцию (например, ArrayList) и помещать туда нужные объекты. Затем к этой коллекции будет обращаться метод OnPaint().
Возможности класса Graphics
Наиболее часто используемые методы этого класса представлены в таблице.
Таблица 5.4. Некоторые методы класса Graphics
Метод | Назначение |
FromHdc(), FromHwnd(), FromImage() | Эти статические методы обеспечивают возможность получения объекта Graphics из элемента управления или изображения |
Clear() | Заполняет объект Graphics выбранным пользователем цветом, удаляя его предыдущее содержимое |
DrawArc() | Этот метод предназначен для вывода дуги. |
DrawEllipse() | Рисует эллипс |
DrawLine() | Рисует линию |
DrawPie() | Рисует сектор |
DrawPolygon() | Рисует замкнутую произвольную область |
DrawRectange() | Рисует прямоугольник |
DrawString() | Выводит строку |
FillElllpse() | Рисует закрашенный эллипс |
FillPie() | Рисует закрашенный сектор |
FillPolygon() | Рисует закрашенную криволинейную замкнутую область |
FillRectangle() | Рисует закрашенный прямоугольник |
Класс Pen
Pen - класс пера, имеющий два основных атрибута: цвет и ширину. Пример использования, в проекте типа Windows Application внутри любой функции (например OnPaint или функции – обработчике события нажатия кнопки) введите следующий текст:
System.Drawing.Graphics gr = this.CreateGraphics();
System.Drawing.Pen blue = new Pen(Color.Blue); // синее, ширина: 1
System.Drawing.Pen red = new Pen(Color.Red, 2); // красное, ширина: 2
System.Drawing.Pen green = Pens.Green; // зелёное, ширина: 1