Рисование в Windows-формах
Библиотека .NET Framework предоставляет чрезвычайно большой набор классов для реализации рисования в Windows-формах. Кривые Безье, текстурные кисти и перья, трансформация изображения, всевозможные виды градиентной заливки, слои, — практически все атрибуты крупного графического пакета могут быть воссозданы на одном из языков .NET Framework. Для рассмотрения этих методов и свойств потребовалась бы отдельная книга, поэтому мы ограничимся простым приложением, позволяющим рисовать линиями различного цвета и толщины. Создайте новое приложение и назовите его EasyPaint. Устанавливаем следующие значения свойств формы:
BackColor | ActiveCaptionText |
Icon | Code\Glava6\EasyPaint\Icon\rc_bitmap.ico |
Text | EasyPaint |
Добавляем на форму элементы управления MainMenu и ColorDialog. Создаем следующие пункты меню:
mnuFormat | &Формат |
mnuColor | &Цвет |
mnuWidth | &Толщина линии |
Как обычно, рисовать мы будем при удержании и перемещении левой кнопки мыши. В классе формы добавляем объекты:
//Переменная, отвечающая за включения режима рисования. //Значение true — режим включен bool DrawMode = false; //Создаем массив точек, из которых будут формироваться линии ArrayList points = new ArrayList();
Для рисования линий и кривых в библиотеки .NET Framework имеется класс Pen, экземпляр которого нам и нужно создать:
Pen mainPen;
В графических программах принято в рабочей области изменять курсор — пользователю удобнее рисовать, когда он имеет вид карандаша. Можно просто установить значение из перечисления свойства Cursor формы (рис. 6.16), но как быть, если нужен вид, не входящий в это перечисление?
Рис. 6.16. Свойство Cursor формы
Самый простой способ добавить произвольный курсор к приложению — это поместить изображение курсора (в данном случае, Pencil.cur) в папку bin\Debug приложения и в конструкторе формы указать этот курсор в качестве основного:
public Form1() { InitializeComponent(); this.Cursor = new Cursor("Pencil.cur"); mainPen = new Pen(this.ForeColor); }
Во второй строчке мы также устанавливаем цвет созданного пера mainPen. Переключаемся в режим дизайна, в окне Properties в событиях формы дважды щелкаем в поле событий MouseDown, MouseMove, MouseUp:
Листинг 6.11.
(html, txt)
Логика работы предельно проста — при нажатии левой кнопки мыши включается режим рисования; при ее перемещении формируется массив точек с текущими координатами мыши, массив изображений точек pts затем передается методу DrawCurve, который и рисует линию. При отпускании кнопки режим рисования отключается.
В обработчике пункта меню Color при выборе цвета будет создаваться новое перо:
private void mnuColor_Click(object sender, System.EventArgs e) { if(colorDialog1.ShowDialog()==DialogResult.OK) { mainPen = new Pen(colorDialog1.Color); } }
Запускаем приложение. Вызывая диалоговое окно выбора цвета, можно рисовать разными цветами на форме (рис. 6.17).
Рис. 6.17. Приложение EasyPaint. Курсор имеет точно такой же вид, как и в редакторе Microsoft Paint