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

       

Рисование при помощи перемещения мыши


Листинг 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”). Методы сохранения и печати нашего рисунка уже были приведены выше.

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