Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерная графика, мультимедиа и игры на Vis...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.92 Mб
Скачать

Глава 28. Рисование прямоугольников и эллипсов при помощи нажатия кнопки мыши

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

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

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

public int x_MouseDown_1, y_MouseDown_1;

//Определяем координаты указателя в момент нажатия кнопки:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

{

x_MouseDown_1 = e.X;

y_MouseDown_1 = e.Y;

}

В панели Properties для элемента управления PictureBox на вкладке Events дважды щелкаем имя второго события MouseUp. Появляется шаблон метода pictureBox1_MouseUp для обработки события MouseUp в виде отпускания кнопки мыши. После записи нашего кода шаблон принимает следующий вид.

Листинг 28.2. Метод pictureBox1_MouseUp для обработки отпускания кнопки.

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

{

//Выбираем перо "myPen" черного цвета Black

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

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

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

//ему возможность рисования на pictureBox1:

Graphics g = Graphics.FromHwnd(pictureBox1.Handle);

//Рисуем прямоугольник:

g.DrawRectangle(myPen, x_MouseDown_1, y_MouseDown_1,

e.X - x_MouseDown_1, e.Y - y_MouseDown_1);

}

Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “1. Очистить панель” в режиме проектирования. Появляется шаблон метода button1_Click для обработки события в виде щелчка кнопки; этот шаблон после записи нашего кода принимает следующий вид.

Листинг 28.3. Метод button1_Click для стирания рисунка.

private void button1_Click(object sender, EventArgs e)

{

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

//и связываем его с pictureBox1:

Graphics g = pictureBox1.CreateGraphics();

//Очищаем (Clear) элемент pictureBox1 от рисунка

//и заполняем его белым цветом:

g.Clear(Color.White);

}

В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник. Аналогично строим еще несколько прямоугольников (рис. 28.1).

Если в коде на листинге 28.2 вместо строки для прямоугольника мы запишем

g.DrawEllipse(myPen, x_MouseDown_1, y_MouseDown_1,

e.X - x_MouseDown_1, e.Y - y_MouseDown_1);

то по этому второму варианту программы можем рисовать эллипсы (рис. 28.2) согласно алгоритму. После щелчка кнопки с надписью “1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.

Глава 29. Рисование заполненных прямоугольников и эллипсов при помощи нажатия кнопки мыши

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

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

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

public int x_MouseDown_1, y_MouseDown_1;

//Определяем координаты указателя в момент нажатия кнопки:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

{

x_MouseDown_1 = e.X; y_MouseDown_1 = e.Y;

}

В панели Properties для элемента управления PictureBox на вкладке Events дважды щелкаем имя второго события MouseUp. Появляется шаблон, который после записи нашего кода принимает следующий вид.

Листинг 29.2. Метод pictureBox1_MouseUp для обработки отпускания кнопки.

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

{

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

//ему возможность рисования на pictureBox1:

Graphics g = Graphics.FromHwnd(pictureBox1.Handle);

//Создаем и рисуем прямоугольник:

Rectangle myRectangle = new Rectangle(

new Point(x_MouseDown_1, y_MouseDown_1),

new Size(e.X - x_MouseDown_1, e.Y - y_MouseDown_1));

g.DrawRectangle(new Pen(Color.Transparent),

myRectangle);

//Выбираем кисть myBrush для линейного градиента

//между белым White и черным Black цветами:

LinearGradientBrush myBrush;

myBrush = new LinearGradientBrush(myRectangle,

Color.White, Color.Black,

LinearGradientMode.Horizontal);

//Рисуем заполненный прямоугольник:

g.FillRectangle(myBrush, myRectangle);

}

Чтобы удалить, в случае необходимости, то, что мы нарисовали, дважды щелкаем кнопку с надписью “1. Очистить панель” в режиме проектирования. Появляется шаблон метода button1_Click для обработки события в виде щелчка кнопки; этот шаблон после записи нашего кода принимает следующий вид.

Листинг 29.3. Метод button1_Click для стирания рисунка.

private void button1_Click(object sender, EventArgs e)

{

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

//и связываем его с pictureBox1:

Graphics g = pictureBox1.CreateGraphics();

//Очищаем (Clear) элемент pictureBox1 от рисунка

//и заполняем его белым цветом:

g.Clear(Color.White);

}

В режиме выполнения (Debug, Start Without Debugging) перемещаем указатель мыши в первую точку, нажимаем кнопку, перемещаем указатель мыши во вторую точку и отпускаем кнопку; при этом из предыдущей точки в данную точку рисуется прямоугольник, заполненный по линейному градиенту между двумя заданными цветами (белым White и черным Black). Аналогично строим еще несколько прямоугольников (рис. 29.1). Если в коде на листинге 29.2 вместо строки для прямоугольника мы запишем (g.FillEllipse(myBrush, myRectangle);), то по этому второму варианту программы можем рисовать эллипсы, заполненные по тому же линейному градиенту, рис. 29.2. После щелчка кнопки с надписью “1. Очистить панель” (или нажатия клавиши Enter, или Alt+1) то, что мы нарисовали, удаляется. И мы можем начать рисовать сначала.