Информационные технологииStfw.Ru 🔍

Создание многооконного приложения, имеющего меню. Рисование прямоугольников под управлением мыши.

Рисование на экране прямоугольников под управлением мыши.
🕛 22.05.2009, 13:41
MDI (Multiple-document interface) приложения позволяют отображать несколько документов одновременно. Такая организация приложения является типичной для программ - редакторов документов различных форматов. При этом каждый документ будет отображаться в своем собственном окне. Обычно MDI приложения имеют в основном меню подпункты для переключения между окнами. Основным окном MDI приложения является родительская форма. Она может содержать несколько дочерних окон. Только одно из дочерних окон может быть активно в один момент времени.

Программы в среде Windows могут иметь основное меню. Меню приложения позволяет создавать иерархию вложенных друг в друга меню команд любой степени сложности. С пунктами меню связываются реализуемые в классе формы методы-обработчики команд меню. Меню могут создаваться и назначаться формам под управлением программного кода и в режиме дизайна формы с использованием интерактивного редактора меню.

Для рисования графических объектов в Windows приложениях платформа .NET использует библиотеку GDI+ .
Пространство имен Drawing содержит множество объектов, которые облегчают программисту работу графикой. GDI+ включает возможности рисования простейших объектов (линии, эллипсы...), рисование различных объектов 2D графики, отображение файлов различных графических форматов (bmp, jpeg, gif, wmf, ico, tiff...) и многое другое.

Большинство функций рисования являются методами класса Graphics. Для рисования нужно создавать объект типа Graphics вызовом функции CreateGraphics(). По завершении использования объекта Graphics программа также должна вызвать его метод Dispose.
Для рисования линий и контуров фигур в GDI+ используется объект перо (тип Pen). При создании пера можно задать его цвет и ширину:
Pen pen = new Pen(Color.Black, 1);

Прямоугольники рисует метод класса Graphics DrawRectangle. Ему передаются объекты прямоугольник и перо (Pen и Rectangle).
Прямоугольник можно создать, вызвав метод класса Rectangle FromLTRB, которому передаются четыре числа, задающие координаты левого верхнего и правого нижнего углов прямоугольника:

Rectangle r = Rectangle.FromLTRB(x1, y1, x2, y2);


Рекомендации
Пункт 1. Для создания MDI-приложения откройте проект, созданный в первой работе и установите для формы свойство IsMdiContainer в true, это будет определять форму как родительское окно MDI приложения.
Задайте через свойства формы размер родительского окна 1024x768.

Пункт 2. Для создания меню приложения Visual Studio .NET имеет в панели ToolBox компонент MenuStrip. Добавьте на форму родительского окна компонент MenuStrip. В панели компонентов ниже основной формы приложения появится объект MenuStripl. В верхней части формы появится проект меню с единственным полем «Туре Неrе». Поле является редактируемым, если вы измените надпись в поле, то справа и снизу от него появятся дополнительные поля. Добавьте в меню верхнего уровня пункт «Window» и в его подменю пункт «New». В панели свойств этих пунктов меню в поле «Text» введите русские названия этих пунктов меню - соответственно «Окно» и «Новое».
Для свойства MainMenuStrip в панели свойств формы выберите значение menuStrip1.

Для реализации окон документов MDI-приложения требуется добавить к проекту соответствующую новую форму. Для этого введите команду «Project»-«Add Windows Form». Для созданной формы документа задайте размеры (800x600) и белый цвет фона.
Укажите, что в меню Window следует отображать список созданных окон. Для этого зайдите в панель свойств меню (Properties - menuStrip1) и там для свойства MdiWindowListItem выберите значение WindowToolStripMenu.
Сгенерируйте обработчик команды меню «Окно»-«Новое» двойным щелчком по пункту «Новое» на странице дизайна формы. В тело обработчика поместите код создания и отображения нового окна документа:

Form f = new Form2();
f.MdiParent = this;
f.Text = "Рисунок " + this.MdiChildren.Length.ToString();
f.Show();

Пункт 3. Для решения задачи по рисованию прямоугольников в классе Form2 потребуется обрабатывать события мыши MouseDown, MouseMove, MouseUp. Добавьте соответствующие методы-обработчики.

Также потребуется добавить поля данных в класс Form2 для хранения координат рисуемого прямоугольника, объекта Graphics и флага нажатой кнопки мыши (признака процесса рисования).

При нажатии на левую кнопку мыши следует инициализировать объект Graphics, устанавливать флаг рисования, инициализировать начальные координаты прямоугольника.

При перемещении мыши следует проверять флаг рисования, и если он установлен, следует рисовать промежуточный пунктирный контур прямоугольника, предварительно стирая контур, нарисованный в предыдущем вызове этого обработчика. Для стирания контура можно рисовать поверх него прямоугольник цветом фона.

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

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

pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;

Белое перо для стирания промежуточных контуров может быть создано так:

new Pen(Color.White, 1)

Следует учесть, что методу DrawRectangle должен передаваться нормализованный прямоугольник, у которого значения координат первой точки всегда меньше значений соответствующих координат второй точки. Поскольку мышь в процессе рисования может оказаться левее и выше точки нажатия на левую кнопку, её текущие координаты нельзя непосредственно использовать в качестве координат второй точки, задающей прямоугольник. Перед передачей четырёх координат в метод Rectangle.FromLTRB их следует предварительно упорядочивать, используя вспомогательные переменные, таким образом, чтобы в первой паре аргументов передавались всегда меньшие значения координат.

Си: C/C++   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉