Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Проверка попадания курсора мыши внутрь круга




Изменение цвета круга в программе должно происходить при щелчке левой кнопкой мыши внутри круга (событие MouseClick для компонента pictureBox1). Для этого необходимо отслеживать координаты курсора мыши: попал ли он в момент щелчка внутрь круга.

Если область изображения прямоугольная, то такая проверка осуществляется достаточно просто:

If (прямоугольник.Contains(точка_курсора))

//выполнить нужные действия

Если же область изображения – не прямоугольная (круг, как в нашем случае, или более сложная фигура), нужно использовать компоненты класса GraphicsPath для формирования сложных фигур. Объект этого типа описывается в классе Form1

GraphicsPath path;

и в конструкторе класса формы ему выделяется память:

path = new GraphicsPath();

Когда на экране рисуется очередной новый круг, его изображение помещается в предварительно очищенный объект GraphicsPath. Таким образом, в конец метода pictureBox1_Paint надо добавить следующие строки:

 

//очищаем фигуру

path.Reset();

//начинаем формирование фигуры

path.StartFigure();

//добавляем круг в фигуру

path.AddEllipse(x0-radius, y0 - radius, 2 * radius, 2 * radius);

//завершаем формирование фигуры

path.CloseFigure();

 

Если изображение состоит из нескольких элементов (не только из одного круга, как в нашем случае), их все нужно добавить в объект GraphicsPath.

 

Изменение цвета круга

Прежде всего, в класс формы необходимо добавить переменную, задающую цвет круга:

Color myColor;

Начальное значение (желтый цвет) присваивается ей в конструкторе формы:

myColor = Color.Yellow;

Изменение цвета круга происходит при щелчке левой кнопки мыши внутри круга (возможно, движущегося) в обработчике события MouseClick (не просто Click!) компонента pictureBox1. Пояснения к коду приведены в комментариях:

 

Private void pictureBox1_MouseClick(object sender, MouseEventArgs e)

{

//проверяем, был ли щелчок именно левой кнопкой мыши

if (e.Button == MouseButtons.Left)

{

//получаем точку с координатами места щелчка

Point pt = new Point(e.X, e.Y);

//если эта точка - внутри фигуры (круга)

If (path.IsVisible(pt))

{

//создаем объект формы выбора цвета

Form2 form = new Form2();

//передаем в форму текущий цвет круга

form.CircleColor = myColor;

//отображаем форму на экране

if (form.ShowDialog() == DialogResult.OK)

{

//получаем значение выбранного цвета

myColor = form.CircleColor;

//перерисовываем круг

pictureBox1.Invalidate();

}

}

}

}

 

После этого остается лишь указание значение выбранного цвета при создании кисти: в методе pictureBox1_Paint строку

HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, Color.Yellow);

заменить на строку

HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, myColor);

 

Варианты заданий для самостоятельной работы

В каждом варианте необходимо реализовать движение требуемого изображения по заданной траектории, не допуская при этом выход фигуры за пределы области рисования. Каждое изображение состоит из нескольких (двух-трех) элементарных фигур. Предусмотреть:

- возможность изменения скорости движения с помощью компонента TrackBar;

- выбор цвета заливки фигуры нажатием левой кнопки мыши внутри изображения. Для выбора используется стандартное диалоговое окно выбора цвета (компонент ColorDialog);

- выбор стиля заливки фигуры нажатием правой кнопки мыши внутри изображения. Для выбора используется пользовательское диалоговое окно с радиокнопками.

 

 

№ варианта Вид изображения Траектория движения
1. Вдоль границ области рисования по часовой стрелке
2. Вдоль границ области рисования против часовой стрелки
3. От центра области рисования: вверх, вниз, влево, вправо
4. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
5. От центра области рисования поочередно к углам. От угла – назад в центр
6. Вдоль границ области рисования по часовой стрелке
7. Вдоль границ области рисования против часовой стрелки
8. От центра области рисования: вверх, вниз, влево, вправо
9. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
10. От центра области рисования поочередно к углам. От угла – назад в центр
11. Вдоль границ области рисования по часовой стрелке
12. Вдоль границ области рисования против часовой стрелки
13. От центра области рисования: вверх, вниз, влево, вправо
14. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
15. От центра области рисования поочередно к углам. От угла – назад в центр
16. Вдоль границ области рисования по часовой стрелке
17. Вдоль границ области рисования против часовой стрелки
18. От центра области рисования: вверх, вниз, влево, вправо
19. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
20. От центра области рисования поочередно к углам. От угла – назад в центр
21. Вдоль границ области рисования по часовой стрелке
22. Вдоль границ области рисования против часовой стрелки
23. От центра области рисования: вверх, вниз, влево, вправо
24. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
25. От центра области рисования поочередно к углам. От угла – назад в центр
26. Вдоль границ области рисования по часовой стрелке
27. Вдоль границ области рисования против часовой стрелки
28. От центра области рисования: вверх, вниз, влево, вправо
29. От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру
30. От центра области рисования поочередно к углам. От угла – назад в центр

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...