Проверка попадания курсора мыши внутрь круга
⇐ ПредыдущаяСтр 5 из 5 Изменение цвета круга в программе должно происходить при щелчке левой кнопкой мыши внутри круга (событие 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); - выбор стиля заливки фигуры нажатием правой кнопки мыши внутри изображения. Для выбора используется пользовательское диалоговое окно с радиокнопками.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|