Showing
4 changed files
with
153 additions
and
0 deletions
CustomPanel.cs
0 → 100644
1 | +using System; | ||
2 | +using System.Collections.Generic; | ||
3 | +using System.Linq; | ||
4 | +using System.Text; | ||
5 | +using System.Threading.Tasks; | ||
6 | +using System.Windows.Forms; | ||
7 | + | ||
8 | +namespace flowchart | ||
9 | +{ | ||
10 | + // flowchart를 그리는 판넬에 필요한 기능을 삽입. (Panel 객체를 상속해서 사용했음) | ||
11 | + // 마우스 클릭을 놓으면 어떤 도형을 선택했는지 판단해서, 해당 자료구조를 생성하고, 페인트 함수를 통해 그린다. | ||
12 | + class CustomPanel : Panel | ||
13 | + { | ||
14 | + private String _selectName; | ||
15 | + private List<FigBase> _shapes = new List<FigBase>(); | ||
16 | + | ||
17 | + public string SelectName { get => _selectName; set => _selectName = value; } | ||
18 | + | ||
19 | + protected override void OnMouseUp(MouseEventArgs e) | ||
20 | + { | ||
21 | + //MessageBox.Show("Added shape. " + SelectName + " " + e.Location.ToString()); | ||
22 | + | ||
23 | + if (SelectName == "RECTANGLE") | ||
24 | + { | ||
25 | + // 사각형에 대한 정보를 자료구조에 삽입한다. | ||
26 | + FigRectangle rectangle = new FigRectangle(e.Location, new System.Drawing.Size(100, 100)); | ||
27 | + _shapes.Add(rectangle); | ||
28 | + } | ||
29 | + else if (SelectName == "ELLIPSE") | ||
30 | + { | ||
31 | + // TODO : 원 그리기 | ||
32 | + } | ||
33 | + else if (SelectName == "TRIANGLE") | ||
34 | + { | ||
35 | + // TODO : 삼각형 그리기 | ||
36 | + } | ||
37 | + | ||
38 | + this.Cursor = Cursors.Default; | ||
39 | + this.Refresh(); // 다시 그리기 요청 | ||
40 | + base.OnMouseUp(e); | ||
41 | + } | ||
42 | + | ||
43 | + // 실제 그리는 OnPaint를 통해 내가 작성한 Draw함수를 호출한다. | ||
44 | + protected override void OnPaint(PaintEventArgs e) | ||
45 | + { | ||
46 | + foreach (FigBase s in _shapes) | ||
47 | + { | ||
48 | + s.Draw(e.Graphics); | ||
49 | + } | ||
50 | + | ||
51 | + base.OnPaint(e); | ||
52 | + } | ||
53 | + } | ||
54 | +} |
FigBase.cs
0 → 100644
1 | +using System; | ||
2 | +using System.Collections.Generic; | ||
3 | +using System.Drawing; | ||
4 | +using System.Linq; | ||
5 | +using System.Text; | ||
6 | +using System.Threading.Tasks; | ||
7 | + | ||
8 | +namespace flowchart | ||
9 | +{ | ||
10 | + // flowchart 도형을 그리는 클래스의 공통(부모 클래스) | ||
11 | + // 변수: 위치(_location), 크기(_size) | ||
12 | + // 함수: 그리기(Draw) | ||
13 | + class FigBase | ||
14 | + { | ||
15 | + private Point _location; // 위치 변수 | ||
16 | + private Size _size; // 크기 변수 | ||
17 | + | ||
18 | + protected FigBase(Point location, Size size) // 생성자 (위치와 크기를 저장) | ||
19 | + { | ||
20 | + _location = location; | ||
21 | + _size = size; | ||
22 | + } | ||
23 | + | ||
24 | + // 위치와 크기 변수의 값을 읽고 쓰는 함수 | ||
25 | + public Point Location { get => _location; set => _location = value; } | ||
26 | + public Size Size { get => _size; set => _size = value; } | ||
27 | + | ||
28 | + // 자식 클래스에 필요한 공통 함수 | ||
29 | + public virtual void Draw(Graphics g) | ||
30 | + { | ||
31 | + | ||
32 | + | ||
33 | + } | ||
34 | + } | ||
35 | +} |
FigRectangle.cs
0 → 100644
1 | +using System; | ||
2 | +using System.Collections.Generic; | ||
3 | +using System.Drawing; | ||
4 | +using System.Linq; | ||
5 | +using System.Text; | ||
6 | +using System.Threading.Tasks; | ||
7 | + | ||
8 | +namespace flowchart | ||
9 | +{ | ||
10 | + // 프로세스 사각형을 그리는 클래스(FigureBase를 상속) | ||
11 | + // Draw 함수에서 사각형을 그린다. | ||
12 | + class FigRectangle : FigBase | ||
13 | + { | ||
14 | + // 생성자도 상속해서 사용. | ||
15 | + public FigRectangle(Point location, Size size) : base(location, size) | ||
16 | + { | ||
17 | + | ||
18 | + } | ||
19 | + | ||
20 | + public override void Draw(Graphics g) | ||
21 | + { | ||
22 | + using (Pen pen = new Pen(Color.Red, 1)) | ||
23 | + { | ||
24 | + System.Drawing.Rectangle rect = new System.Drawing.Rectangle(this.Location, this.Size); | ||
25 | + g.DrawRectangle(pen, rect); // 사각형 그리는 함수 | ||
26 | + | ||
27 | + } | ||
28 | + | ||
29 | + base.Draw(g); | ||
30 | + } | ||
31 | + } | ||
32 | +} |
MainForm.cs
0 → 100644
1 | +using System; | ||
2 | +using System.Collections.Generic; | ||
3 | +using System.ComponentModel; | ||
4 | +using System.Data; | ||
5 | +using System.Drawing; | ||
6 | +using System.Linq; | ||
7 | +using System.Text; | ||
8 | +using System.Threading.Tasks; | ||
9 | +using System.Windows.Forms; | ||
10 | + | ||
11 | +namespace flowchart | ||
12 | +{ | ||
13 | + public partial class MainForm : Form | ||
14 | + { | ||
15 | + public MainForm() | ||
16 | + { | ||
17 | + InitializeComponent(); | ||
18 | + } | ||
19 | + | ||
20 | + private void btn_rec_Click(object sender, EventArgs e) | ||
21 | + { | ||
22 | + CustomPanel.SelectName = "RECTANGLE"; | ||
23 | + CustomPanel.Cursor = Cursors.Hand; | ||
24 | + } | ||
25 | + | ||
26 | + private void btn_default_Click(object sender, EventArgs e) | ||
27 | + { | ||
28 | + CustomPanel.SelectName = "NONE"; | ||
29 | + CustomPanel.Cursor = Cursors.Default; | ||
30 | + } | ||
31 | + } | ||
32 | +} |
-
Please register or login to post a comment