⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cs

📁 画图程序
💻 CS
📖 第 1 页 / 共 5 页
字号:
		private void AddHollowEllipse_Click(object sender, System.EventArgs e) 
		{
			this.statusBar.Panels[0].Text = "Ellipse";
			newType = ImageType.Ellipse;
		}

		private void AddHollowRectangle_Click(object sender, System.EventArgs e) 
		{
			this.statusBar.Panels[0].Text = "Rectangle";
			newType = ImageType.Rectangle;
		}

		private void AddFilledEllipse_Click(object sender, System.EventArgs e) 
		{
			this.statusBar.Panels[0].Text = "FillEllipse";
			newType = ImageType.FillEllipse;
		}

		private void AddFilledRectangle_Click(object sender, System.EventArgs e) 
		{
			this.statusBar.Panels[0].Text = "FillRectangle";
			newType = ImageType.FillRectangle;
		}

		private void AddPath_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "Path";
			newType = ImageType.Path;
		}

		private void btnEraser_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "Eraser";
			newType = ImageType.Eraser;
			EraserSize = 2;
		}

		private void btnText_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "Text";
			newType = ImageType.Text;
			MakeForm();
		}

		private void btnCircleAt_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "CircleAt";
			newType = ImageType.CircleAt;
			MakeCircleAt();
		}

		private void AddPolygon_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "Polygon";
			newType = ImageType.Polygon;
		}
		private void Curve_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "Curve";
			newType = ImageType.Curve;
		}

		private void ClosedCurve_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "ClosedCurve";
			newType = ImageType.ClosedCurve;
		}
		private void btnPick_Click(object sender, System.EventArgs e)
		{
			this.statusBar.Panels[0].Text = "PickUp";
			newType = ImageType.Pick;
		}

		private void Change_Click(object sender, System.EventArgs e)
		{
			if(drawingList.Count==0)
				return;
			picked = false;
			drawingListUndo.Add(drawingList[drawingList.Count-1]);
			drawingList.RemoveAt(drawingList.Count-1);
			regionCollectionUndo.Add(regionCollection[regionCollection.Count-1]);
			regionCollection.RemoveAt(regionCollection.Count-1);
			pointArrayUndo.Add(pointArray[pointArray.Count-1]);
			pointArray.RemoveAt(pointArray.Count-1);
			regionArrayCollectionUndo.Add(regionArrayCollection[regionArrayCollection.Count-1]);
			regionArrayCollection.RemoveAt(regionArrayCollection.Count-1);
			drawImageTypeUndo.Add((ImageType)drawImageType[drawImageType.Count-1]);
			drawImageType.RemoveAt(drawImageType.Count-1);
			newType = ImageType.Empty;
			Drawing.Invalidate();
		}

		private void NotChange_Click(object sender, System.EventArgs e)
		{
			if(notchangeList.Count==0)
				return;
			notchangeListUndo.Add(notchangeList[notchangeList.Count-1]);
			notchangeList.RemoveAt(notchangeList.Count-1);
			Drawing.Invalidate();
		}

		private void Change2_Click(object sender, System.EventArgs e)
		{
			if(drawingListUndo.Count==0)
				return;
			picked = false;
			drawingList.Add(drawingListUndo[drawingListUndo.Count-1]);
			drawingListUndo.RemoveAt(drawingListUndo.Count-1);
			regionCollection.Add(regionCollectionUndo[regionCollectionUndo.Count-1]);
			regionCollectionUndo.RemoveAt(regionCollectionUndo.Count-1);
			pointArray.Add(pointArrayUndo[pointArrayUndo.Count-1]);
			pointArrayUndo.RemoveAt(pointArrayUndo.Count-1);
			regionArrayCollection.Add(regionArrayCollectionUndo[regionArrayCollectionUndo.Count-1]);
			regionArrayCollectionUndo.RemoveAt(regionArrayCollectionUndo.Count-1);
			drawImageType.Add((ImageType)drawImageTypeUndo[drawImageTypeUndo.Count-1]);
			drawImageTypeUndo.RemoveAt(drawImageTypeUndo.Count-1);
			Drawing.Invalidate();
		}

		private void NotChange2_Click(object sender, System.EventArgs e)
		{
			if(notchangeListUndo.Count==0)
				return;
			notchangeList.Add(notchangeListUndo[notchangeListUndo.Count-1]);
			notchangeListUndo.RemoveAt(notchangeListUndo.Count-1);
			Drawing.Invalidate();
		}
		#endregion

		#region 鼠标事件
		/// <summary>
		/// 鼠标事件
		/// </summary>		
		private void Drawing_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if (e.Button != MouseButtons.Left)
				return;
			newPoint = new MousePoint(e.X, e.Y);
			switch(newType)
			{
				case ImageType.Path:
					mousePath = new GraphicsPath();
					mousePath.AddLine(e.X,e.Y,e.X,e.Y);
					break;
				case ImageType.Eraser:
					eraser = true;
					newPoint.EndX = e.X;
					newPoint.EndY = e.Y;
					Point p = newPoint.StartP;
					p.Offset(-2,-2);
					newRegion = new Region(new Rectangle(p, new Size(4,4)));
					break;
				case ImageType.Text:				
					newForm.Show();
					break;
				case ImageType.Polygon:
					pointCollection.Add(newPoint.StartP);
					tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
					Drawing.Invalidate();
					break;
				case ImageType.Curve:
					pointCollection.Add(newPoint.StartP);
					tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
					Drawing.Invalidate();
					break;
				case ImageType.ClosedCurve:
					pointCollection.Add(newPoint.StartP);
					tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
					Drawing.Invalidate();
					break;
				case ImageType.Pick:
					if(picked == true)
					{
						for(int k=0;k<regionArrayCollection[regionIndex].Length;k++)
						{
							if(regionArrayCollection[regionIndex][k].IsVisible(newPoint.StartP))
							{
								pointIndex = k;
								changed = true;
								break;
							}
							else
								changed = false;
						}
						if(changed == true)
							break;
					}
					int m = regionIndex;
					if(picked == true)
						m = (regionIndex+1)%regionCollection.Count;		//循环下一项开始
					int n = 0;
					for(;n<regionCollection.Count;n++)
					{
						if(m >= regionCollection.Count)
							m = 0;
						if(regionCollection[m++].IsVisible(newPoint.StartP))
						{
							pointViewList = new DShapeList();
							regionIndex = m-1;
							tempMovePoint = new Point[pointArray[regionIndex].Length];
							for(int j=0;j<pointArray[regionIndex].Length;j++)
							{
								tempMovePoint[j] = pointArray[regionIndex][j];
							}
							PointView(regionIndex);
							Drawing.Invalidate();
							picked = true;
							if(drawImageType[regionIndex]==(int)ImageType.Path)
							{
								mousePath = drawingList[regionIndex].pathChange(mousePath,true);
							}
							changed = false;
							break;
						}
						else
						{
							pointViewList = new DShapeList();
							Drawing.Invalidate();
							picked = false;							
						}
					}
					break;
			}
		}

		private void Drawing_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if (e.Button != MouseButtons.Left)
				return;
			newPoint.EndX = e.X;
			newPoint.EndY = e.Y;
			this.statusBar.Panels[1].Text="Point:"+e.X.ToString() + "," + e.Y.ToString();
			switch(newType)
			{
				case ImageType.Path:
					mousePath.AddLine(e.X,e.Y,e.X,e.Y);
					break;
				case ImageType.Eraser:
					Point p = newPoint.EndP;
					p.Offset(-EraserSize,-EraserSize);
					newRegion = new Region(new Rectangle(p, new Size(EraserSize*2,EraserSize*2)));
					notchangeList.Add(new DEraser(newPoint.EndP, newColor, EraserSize));
					break;
				case ImageType.Pick:
					if(picked == true&&changed !=true)
					{
						mouseMove = true;
						int MoveX = newPoint.EndP.X-newPoint.StartP.X;
						int MoveY = newPoint.EndP.Y-newPoint.StartP.Y;
						RegionMove(regionIndex, MoveX,MoveY);
						if(drawImageType[regionIndex]!=(int)ImageType.Path)
						{
							drawingList[regionIndex].pointchange(pointArray[regionIndex]);							
						}
						else
						{
							regionPath = (GraphicsPath)mousePath.Clone();
							Matrix translateMatrix = new Matrix();
							translateMatrix.Translate(MoveX, MoveY);
							regionPath.Transform(translateMatrix);
							drawingList[regionIndex].pathChange(regionPath,false);
						}
						PointChange(regionIndex);
					}
					if(changed ==true&&drawImageType[regionIndex]!=(int)ImageType.Path)
					{
						mouseMove = true;
						pointArray[regionIndex][pointIndex] = newPoint.EndP;
						if(drawImageType[regionIndex]==(int)ImageType.Rectangle
							||drawImageType[regionIndex]==(int)ImageType.FillRectangle
							||drawImageType[regionIndex]==(int)ImageType.Ellipse
							||drawImageType[regionIndex]==(int)ImageType.FillEllipse)
						{
							tempChangePoint = new MousePoint(pointArray[regionIndex][1-pointIndex].X, pointArray[regionIndex][1-pointIndex].Y);
							tempChangePoint.EndX = pointArray[regionIndex][pointIndex].X;
							tempChangePoint.EndY = pointArray[regionIndex][pointIndex].Y;
							regionCollection[regionIndex] = new Region(tempChangePoint.Rect);
						}	
						drawingList[regionIndex].pointchange(pointArray[regionIndex]);
						PointChange(regionIndex);
					}
					break;
			}
			Drawing.Invalidate();
		}

		private void Drawing_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			switch(newType)
			{
				case ImageType.Point:
					//加顶点
					tempPointArray = new Point[1]{newPoint.StartP};
					pointArray.Add(tempPointArray);
					//加顶点区域
					Point2Region(tempPointArray);
					regionArrayCollection.Add(tempRegion);
					//加图元区域
					newPoint.StartP.Offset(-2,-2);
					regionCollection.Add(new Region(new Rectangle(newPoint.StartP, new Size((int)lineWidth*4, (int)lineWidth*4))));
					drawImageType.Add(ImageType.Point);
					//加图元
					drawingList.Add(new DPoint(tempPointArray,newColor,lineWidth));
					break;
				case ImageType.Line:
					//加顶点
					tempPointArray = new Point[2]{newPoint.StartP,newPoint.EndP};
					pointArray.Add(tempPointArray);
					//加顶点区域
					Point2Region(tempPointArray);
					regionArrayCollection.Add(tempRegion);
					//加图元区域
					if(Math.Abs((float)(newPoint.StartP.Y-newPoint.EndP.Y)/(float)(newPoint.StartP.X-newPoint.EndP.X))<=1)
					{
						regionPath = new GraphicsPath(new Point[]{
																	 new Point(newPoint.StartP.X,newPoint.StartP.Y-10),
																	 new Point(newPoint.EndP.X,newPoint.StartP.Y-10),
																	 new Point(newPoint.EndP.X,newPoint.EndP.Y+10),
																	 new Point(newPoint.StartP.X,newPoint.EndP.Y+10),
																	 new Point(newPoint.StartP.X,newP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -