Компьютерная графика, мультимедиа и игры на Visual C#

       

Рисование линий при помощи нажатия кнопки мыши


Листинг 27.1. Объявляем глобальные переменные и записываем наш код.

    //Объявляем глобальные переменные для координат "x" и "y"

    //указателя мыши в момент 1-го и 2-го нажатий кнопки мыши:

    public int x_MouseDown_1, y_MouseDown_1,

                x_MouseDown_2, y_MouseDown_2;

    //Чтобы рисование осуществлялось только после каждого щелчка

    //кнопки,объявляем переключатель рисования

    //в виде глобальной переменной OffOn:

    bool OffOn = false;

    private void Form1_MouseDown(object sender, MouseEventArgs e)

    {

        //Объявляем объект "g" класса Graphics

        //и при помощи функции CreateGraphics



        //предоставляем ему возможность рисования

        //на this форме Form1:

        Graphics g = this.CreateGraphics();

        //Выбираем перо "myPen" красного цвета Red

        //толщиной в 3 пикселя:

        Pen myPen = new Pen(Color.Red, 3);

        //Определяем координаты "x" и "y" указателя мыши

        //в момент нажатия кнопки мыши:

        x_MouseDown_2 = e.X;

        y_MouseDown_2 = e.Y;

        //Проверяем условие для переменной OffOn:

        //Если переменная OffOn равна

        //исходному значению false,

        if (OffOn == false)

      {

            //то задаем координаты указателя мыши

            //после первого нажатия кнопки мыши:

            x_MouseDown_1 = x_MouseDown_2;

            y_MouseDown_1 = y_MouseDown_2;

            //Изменяем значение OffOn на противоположное:

            OffOn = true;

      }

        else

      {

            //Если переключатель в виде переменной OffOn

            //равен true, то рисуем линию между предыдущей

            //и последующей позицией указателя мыши

        //в момент нажатия кнопки мыши:

        g.DrawLine(myPen, x_MouseDown_1, y_MouseDown_1,

                               x_MouseDown_2, y_MouseDown_2);

            //Задаем предыдущей позиции указателя мыши

            //координаты данной позиции указателя мыши:


            x_MouseDown_1 = x_MouseDown_2;
            y_MouseDown_1 = y_MouseDown_2;
      }
    }
Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “Очистить панель” в режиме проектирования. Появляется шаблон функции button1_Click для обработки события в виде щелчка этой кнопки. В тело шаблона записываем код из предыдущей главы для такой же функции,  но с небольшим дополнением, как показано на следующем листинге.
Листинг 27.2. Метод  button1_Click для стирания рисунка.
private void button1_Click(object sender, EventArgs e)
{
    //Объявляем объект "g" класса Graphics:
    Graphics g = this.CreateGraphics();
    //Очищаем (Clear) клиентскую область Form1 от рисунка:
    g.Clear(BackColor);
    //Чтобы рисование осуществлялось только от позиции
    //курсора на предыдущем щелчке до позиции курсора
    //на данном щелчке кнопки мыши,задаем переключателю
    //в виде глобальной переменной OffOn
    //первоначальное значение:
    OffOn = false;
}
В режиме выполнения (Debug, Start Without Debugging) мы можем рисовать при помощи щелчков кнопки мыши любой текст или фигуру, согласно алгоритму, как в качестве примера показано на рис. 27.1. После щелчка кнопки с надписью “Очистить панель” то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.

Содержание раздела