Читайте также:
|
|
Разработка приложения с многодокументным интерфейсом.
по дисциплине «Технология программирования»
Выполнил:
студент группы ИВТ 1104
Смольянинов Максим Сергеевич
Проверил:
Удалов Алексей Владимирович
Тверь, 2013
Задание на лабораторную работу.
На основе созданного в предыдущей лабораторной работе редактора геометрических фигур разработать его многодокументную версию.
Для этого необходимо выполнить следующее:
1. Настроить созданное ранее приложение для редактирования геометрических фигур как дочернее окно.
2. Разработать родительскую форму многодокументного редактора фигур обеспечивающего следующие возможности:
· Скрывать локальные меню дочерних окон и управлять процессом редактировании с помощью меню родительской формы;
· Скрывать локальные панели управления дочерних окон и управлять процессом редактировании с помощью панели управления, расположенной на родительской форме.
· Сохранять созданные в дочерних окнах множества фигур в файл с возможностью их воспроизведения;
Описание приложения
Данное приложение представляет собой усовершенствованный вариант приложения для редактирования раскрашенных многоугольников. В отличии от редактора многоугольников, предоставляющего базовые возможности по редактированию фигур, таких как: перемещение, добавление, удаление фигур и точек и изменения цвета, данное приложение позволяет сохранять фигуры выбранного окна в некотором файле с данными и воспроизводить их из него.
Интерфейс приложения является многодокументным, что подразумевает наличие главного окна и некоторого множества подчиненных ему окон. В меню главного окна реализованы возможности по изменению положения дочерних окон, а также их просмотра в виде списка.
Добавленные функции в форму с многоугольниками:
//Сохраняем в.bmp
private void button8_Click(object sender, EventArgs e)
{
Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(b);
g.CopyFromScreen(pictureBox1.PointToScreen(new Point(0, 0)), new Point(0, 0), pictureBox1.Size);
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "bmp";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
b.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
}
}
private void button9_Click(object sender, EventArgs e)
{
//Сохраняем в.dat
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "dat";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
SaveFigures(sfd.FileName, Figures);
}
private void SaveFigures(string filePath, List<Figure> figures)
{
FileStream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
BinaryWriter br = new BinaryWriter(stream);
br.Write(figures.Count);
for (int i = 0; i < figures.Count; i++)
WriteFigure(br, figures[i]);
br.Close();
stream.Close();
}
private void WriteFigure(BinaryWriter br, Figure figure)
{
Pen borderPen = figure.GetBorderPen();
br.Write((int)borderPen.Width);
br.Write(borderPen.Color.R);
br.Write(borderPen.Color.G);
br.Write(borderPen.Color.B);
SolidBrush brush = figure.GetFigureBrush();
br.Write(brush.Color.R);
br.Write(brush.Color.G);
br.Write(brush.Color.B);
int numberOfPoints = figure.Count();
br.Write(numberOfPoints);
for (int i = 0; i < numberOfPoints; i++)
{
Point p = figure.GetPoint(i);
br.Write(p.X);
br.Write(p.Y);
}
}
private void button10_Click(object sender, EventArgs e)
{
OpenFileDialog od = new OpenFileDialog();
od.Filter = "*.dat|";
if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK)
OpenFigures(od.FileName);
}
private void OpenFigures(string filePath)
{
if (filePath.IndexOf(".dat")!= -1)
{
FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(stream);
int numOfFigures = br.ReadInt32();
for (int i = 0; i < numOfFigures; i++)
Figures.Add(ReadFigure(br));
br.Close();
stream.Close();
}
}
private Figure ReadFigure(BinaryReader br)
{
float penWidth = br.ReadInt32();
Byte R = br.ReadByte();
Byte G = br.ReadByte();
Byte B = br.ReadByte();
Pen pen = new Pen(Color.FromArgb(R, G, B), penWidth);
R = br.ReadByte();
G = br.ReadByte();
B = br.ReadByte();
SolidBrush brush = new SolidBrush(Color.FromArgb(R, G, B));
List<Point> points = new List<Point>();
int numOfPoints = br.ReadInt32();
for (int i = 0; i < numOfPoints; i++)
{
int x = br.ReadInt32();
int y = br.ReadInt32();
points.Add(new Point(x, y));
}
return new Figure(points, pen, brush);
}
Form3.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form3: Form
{
public Form3()
{
InitializeComponent();
this.IsMdiContainer = true;
this.menuStrip1.MdiWindowListItem = окноToolStripMenuItem;
}
private void каскадомToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
private void вертикальноToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
private void горизонтальноToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void окноToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void создатьToolStripMenuItem_Click(object sender, EventArgs e)
{
// Создать новое дочернее окно.
Form1 newChild = new Form1();
// Установить родительскую форму для дочернего окна.
newChild.MdiParent = this;
// Отобразить новую форму.
newChild.Show();
}
Внешний вид приложения:
Дата добавления: 2015-08-10; просмотров: 66 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Расчет стержня АD. | | | Інструкція з охорони праці. |