Реализация первого способа рисования


Для реализации первого (поточечного) способа формирования фигур необходимо предусмотреть соответствующие реакции формы на события, связанные с изменением состояния мыши (в частности, нажатие на левую клавишу). Для этого, с помощью курсора мыши активизируем форму Form1 и обратимся к окну Инспектора Свойств Объектов. Выберем в нём страницу для настройки событий (Events) и способом, описанным выше, активизируем создание пустого шаблона функции отклика на событие MouseDown (рис.10).

Рис.10. Выбор события в окне инспектора свойств формы.

Поскольку нам требуется, чтобы приложение реагировало на нажатие на клавиши "мыши", то выбираем событие MouseDown и путем двойного клика на пустом поле справа от данного события, создаем пока "пустую" функцию, которая будет вызываться каждый раз при наступлении выбранного. В результате этих действий, в окне программного текста данной формы " Form1. cs " автоматически появляется прототип функции-обработчика выбранного события под названием FormMouseDown с пустым телом:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TshiftState

Shift, int X, int Y)

{

}

В соответствии с описанием рассматриваемого способа формирования фигуры многоугольника, приведенного в разделе 2.1.1, в тело этой функции необходимо вставить программный текст, необходимый для выполнения следующих действий:

q После выбора места очередной вершины многоугольника и нажатии на клавишу (например, на левую) мыши необходимо выполнить следующую последовательность действий:

· Если количество вершин более одной, то нарисовать грань многоугольника в виде линии, соединяющей последнюю вершину с точкой размещения курсора мыши.

· создать новую переменную для сохранения новой вершины с координатами курсора мыши и добавить её в список вершин ListPoints.

q При необходимости завершить процесс формирования фигуры, необходимо:

· отрисовать последнюю грань многоугольника путём рисования линии, соединяющей её последнюю и начальную вершины.

· Удалить все элементы из списка, в которых хранятся вершины многоугольника, тем самым подготовив его для формирования следующей фигуры.

Один из возможных вариантов реализации функции FormMouseDown() представлен в Листинге 1.

Листинг 1.

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

Graphics g = CreateGraphics(); //Создаем объект Graphics

Pen pen=new Pen(Color.Black, 1); //Создаем объект "пера"

Point pnt; //Объявляем локальную переменную для хранения координат вершины

if (e.Button == MouseButtons.Left)//Если нажата левая клавиша мыши, то…

{

if (PointsList.Count > 0) //Проверяем: если в списке есть хотя бы одна вершина

{

//то соединяем последнюю вершину с координатами курсора

g.DrawLine(pen, PointsList[PointsList.Count - 1], e.Location);

}

pnt = new Point(e.X, e.Y);// Создаем объект вершины

PointsList.Add(pnt); //Добавляем ее в список вершин

}

else //Если же нажата правая клавиша мыши, то…

{

if (PointsList.Count > 1) //Если есть хотя бы одна вершина, то…

{

//соединяем первую вершину с последней

g.DrawLine(pen, PointsList[0], PointsList[PointsList.Count - 1]);

}

PointsList.Clear();

}

oldCursor.X = e.X;// Запоминаем горизонтальную и

oldCursor.Y = e.Y;// вертикальную координаты курсора

pen.Dispose(); // Освобождаем ресурсы пера

g.Dispose(); //Освобождаем ресурсы объекта Graphics

}

Запустив приложение можно убедиться в работоспособности приведенного текста программы. Однако, рассмотренный вариант реализации функции MouseDown(…) не совсем удачная в том смысле, что, если учесть необходимость того, что эту же функцию придется использовать и для рисования контура фигуры в режиме "резинка", то новая реализация потребует изменения уже отлаженного участка программы, работающей в поточечном режиме. Поэтому для более эффективной реализации функции MouseDown(…), является введение в использование переключателя Switch, в котором учитывается режим вырисовывания. Для этого необходимо в класс главной формы ввести еще одну переменную типа перечисления для хранения режима редактирования. Соответствующая реализация этой функции приведена в листинге 2.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: