Создайте новый проект в том же решении, назовите его Ex7, установите в свойстве решения, чтобы запускался Ex7. Измените свойство Text формы на «Прямоугольники».
В классе Graphics определен метод DrawRectangle(Pen, x, y, w, h), в котором параметры задают перо, координаты верхнего левого угла прямоугольника, а также его ширину и высоту соответственно. Если при рисовании всегда сначала нажимать кнопку мыши в верхнем левом углу прямоугольника и вести мышку к правому нижнему углу прямоугольника, то рисование прямоугольника запрограммировать достаточно просто, поскольку тогда координаты x и y будут известны (первый щелчок мыши), а w и h вычисляются как разница между соответствующими вторыми и первыми координатами. Однако при рисовании пользователь может двигать мышью по‑разному, не всегда начиная с верхнего левого угла.
Опишите в классе формы целые x и y, Graph (тип Graphics)и MyPen (тип Pen). В конструкторе формы задайте значение Graph и MyPen. В событии FormClosing освободите ресурсы, занимаемые Graph и MyPen. Нажатие кнопки мыши (событие MouseDown) определяет координаты первой точки, а освобождение кнопки (событие MouseUp) – само рисования прямоугольника. Создайте обработчики этих событий MouseDown и MouseUp. Введите следующий код:
|
|
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
int w = Math.Abs(e.X - x);
int h = Math.Abs(y - e.Y);
x = Math.Min(e.X, x);
y = Math.Min(e.Y, y);
Graph.DrawRectangle(MyPen, x, y, w, h);
}
Здесь используется класс Math, предоставляющий математические свойства и методы. В частности, мы используем методы Abs () – модуль, Min () – минимум. С помощью этого мы определяем ширину и высоту прямоугольника и координаты верхнего левого угла. При изменении значений переменных x и y определяются координаты верхнего левого угла прямоугольника.
Убедитесь в правильности работы программы.
Если метод DrawRectangle () поменять на DrawEllipse (), то вместо прямоугольников будут рисоваться эллипсы.
Упражнение 3.8. Напишите приложение, которое позволяет рисовать ломаные линии.