윈폼에서 선그리기
Programming/C# / 2010. 7. 22. 18:01
Download source code (Microsoft Visual C# 2005 Express Edition)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<PointF> PointList = new List<PointF>(); int pointIndex = 0; private void Form1_Load(object sender, EventArgs e) { SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); PointF[] pt = new PointF[] { new PointF(100, 100), new PointF(150, 150), new PointF(200, 100), new PointF(100, 100), }; // Get Points From Line(s) float curDist = 0; float distance = 0; for (int i = 0; i < pt.Length - 1; i++) { PointF ptA = pt[i]; PointF ptB = pt[i + 1]; float deltaX = ptB.X - ptA.X; float deltaY = ptB.Y - ptA.Y; curDist = 0; distance = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2)); while (curDist < distance) { curDist++; float offsetX = (float)((double)curDist / (double)distance * (double)deltaX); float offsetY = (float)((double)curDist / (double)distance * (double)deltaY); PointList.Add(new PointF(ptA.X + offsetX, ptA.Y + offsetY)); } } } private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; for (int i = 0; i < pointIndex; i++) { e.Graphics.DrawLine(Pens.Black, PointList[i].X, PointList[i].Y, PointList[i + 1].X, PointList[i + 1].Y); } } private void timer1_Tick(object sender, EventArgs e) { if (pointIndex < PointList.Count - 1) { pointIndex++; this.Refresh(); } } } }
출처 : http://blog.daum.net/starkcb/63
반응형
'Programming > C#' 카테고리의 다른 글
Object sender, EventArgs e 는 무엇인가?? (0) | 2010.07.22 |
---|---|
TextBox에 엔터 이벤트 넣기 (0) | 2010.07.22 |
C#에서 전역변수 사용법 (폼간에) (0) | 2010.07.22 |
레지스트리 값 읽고, 쓰기 방법 (0) | 2010.07.22 |
트레이 아이콘 만들기 (0) | 2010.07.22 |