Рисование при помощи перемещения мыши
Листинг 26.1. Объявляем глобальные переменные и записываем наш код.
//Объявляем глобальные переменные
//для координат "x" и "y" указателя мыши
//в момент нажатия кнопки мыши и перемещения мыши:
public int x_MouseDown, y_MouseDown;
public int x_MouseMove, y_MouseMove;
//Чтобы рисование осуществлялось
//только после каждого щелчка кнопки,
//объявляем переключатель рисования
//в виде глобальной переменной OffOn:
bool OffOn = false;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//Определяем координаты "x" и "y" указателя мыши
//в момент нажатия кнопки мыши:
x_MouseDown = e.X;
y_MouseDown = e.Y;
//Изменяем значение OffOn на противоположное:
OffOn = true;
}
Далее в панели Properties на вкладке Events дважды щелкаем имя второго события, например, MouseMove, показанное на рис. 26.4. Появляется шаблон метода Form1_MouseMove для обработки события MouseMove в виде перемещения мыши. После записи нашего кода шаблон принимает следующий вид.
Листинг 26.2. Метод Form1_MouseMove для перемещения мыши.
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
//Объявляем объект "g" класса Graphics
//и при помощи функции CreateGraphics
//предоставляем ему возможность рисования
//на this Form1:
Graphics g = this.CreateGraphics();
//Определяем координаты "x" и "y" указателя мыши
//в моменты перемещения мыши:
x_MouseMove = e.X;
y_MouseMove = e.Y;
//Выбираем перо "myPen" красного цвета Red
//толщиной в 3 пикселя:
Pen myPen = new Pen(Color.Red, 3);
//Если переключатель рисования
//в виде переменной OffOn равен true:
if (OffOn == true)
{
//после нажатия кнопки мыши и перемещения мыши
//рисуется линия заданного цвета и толщины:
g.DrawLine(myPen, x_MouseDown, y_MouseDown,
x_MouseMove, y_MouseMove);
// Задаем предыдущей позиции указателя мыши
//координаты данной позиции указателя мыши:
x_MouseDown = x_MouseMove;
y_MouseDown = y_MouseMove;
}
}
В панели Properties на вкладке Events дважды щелкаем имя следующего события, например, MouseUp (рис. 26.4). Появляется шаблон функции Form1_ Form1_MouseUp для обработки события MouseUp в виде освобождения кнопки мыши в исходное положение. После записи нашего кода шаблон принимает такой вид.
Листинг 26.3. Метод Form1_MouseUp для освобождения кнопки мыши.
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
//Изменяем значение OffOn на противоположное:
OffOn = false;
}
Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “Очистить панель” в режиме проектирования. Появляется шаблон функции button1_Click для обработки события в виде щелчка кнопки. После записи нашего кода шаблон принимает следующий вид.
Листинг 26.4. Метод button1_Click для стирания рисунка.
private void button1_Click(object sender, EventArgs e)
{
//Объявляем объект "g" класса Graphics:
Graphics g = this.CreateGraphics();
//Очищаем (Clear) клиентскую область
//Form1 от рисунка:
g.Clear(BackColor);
}
В режиме выполнения (Debug, Start Without Debugging) мы можем рисовать мышью любой текст или фигуру, согласно алгоритму, как в качестве примера показано на рис. 26.2 (где мы написали два слова “Visual Studio”). Методы сохранения и печати нашего рисунка уже были приведены выше.