티스토리 뷰
목차
C# 그림판 - GDI 코딩배우기 (닷넷 윈폼 GUI 프로그래밍 강좌)
제가 학생 시절에 만들었던 C# 그림판입니다. 지금 다시 보니 null 여부도 거르지 않고 엉망으로 만들어 놨네요. 어쨌든, 일단 공유하는 차원에서 업로드 합니다.
C# 그림판 첨부파일
프로젝트 전체 압축 파일 : PaintEx.cs [다운]
윈폼 디자이너 소스 : PaintEX.Designer.cs [다운]
윈폼 기능 구현 소스 : PaintEX.zip [다운]
MSDN에서 참조한 DrawData 클래스 : DrawData.cs [다운]
c# 그림판
1. PaintBox 초기화
바로 아래 코드는 프로그램을 처음 실행할 때, 수행되는 코드입니다. C# 그림판 Form이 로드 될 때 불려지는 코드가 되겠죠.
ResizeRedraw의 값을 기준으로 GDI를 갱신합니다. 저 부분을 중심으로 보면 됩니다. (GDI 갱신을 확실히 해줘야 동적 그리기가 가능합니다)
1 2 3 4 5 6 7 8 9 10 11 | private void Form1_Load(object sender, EventArgs e) { Invalidate(); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); // 그림이 잔상을 남기지 않도록 설정 // UserPaint가 True 값을 가질 때만 그리도록 설정 ResizeRedraw = true; // 크기 조정 시 다시 그림 } | cs |
이로써, C# 그림판 폼에서의 그림은 항상 유지될 수 있습니다. 그러나 이건 외곽의 틀만 잡은 것이고 세부적으로도 함수를 정의해 줘야 합니다. 자세한 구현 과정은 바로 아래 소스 코드로 확인해 보세요.
C# 그림판
2. OnPaint 함수 소스
OnPaint 함수에선 saveData 같은 ArrayList에 담긴 좌표와 색상 정보를 이용해 C# 그림판 폼 위에 요소들을 계속 갱신합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | protected override void OnPaint(PaintEventArgs e) { // OnPaint 재정의 Graphics g = e.Graphics; // 그리기 객체 생성 // 4개의 ArrayList에 따로 저장된 선과 도형들을 모두 그려줌 foreach (DrawData outData in saveData) { outData.drawData(e.Graphics); } foreach (DrawData outData in saveLine) { outData.drawData(e.Graphics); } foreach (DrawData outData in saveCircle) { outData.drawData(e.Graphics); } foreach (DrawData outData in saveRectangle) { outData.drawData(e.Graphics); } } | cs |
3. ArrayList 소스에 도형 저장
이 C# 그림판 프로그램에선 선, 원, 사각형, 곡선을 제공하는데, 각각의 좌표 정보는 ArrayList에 별도로 저장이 됩니다.
C# 그림판
1 2 3 4 5 6 | Point startPoint, nowPoint; // 시작 좌표와 현재 좌표 ArrayList saveData; // 커브가 생길 때 마다 저장, 취소 전용 ArrayList saveCurve; // 커브 좌표가 누적되어 저장, 그리기 전용 ArrayList saveLine, saveCircle, saveRectangle; | cs |
소스를 보실 때, 마우스 이벤트와 이 ArrayList의 관계만 잘 파악하시면 되겠어요. 소스가 그렇게 복잡하진 않네요.
C# gdi
이상으로 윈폼 GUI 프로그래밍 예제를 끝내며 더 많은 GDI 강좌는 아래 포스트를 참조해 주세요.
<< 더 보기 >>
- MFC - GDI+ LCD CONTROL (그래픽 라이브러리)
- C# 3D 프로그래밍, GDI+ Euler Rotation 표현
- C# 윈도우 핸들 예제, 다른 프로그램에 도형 그리기 (Graphics)
C# 그림판 - GDI 코딩배우기 (닷넷 윈폼 GUI 프로그래밍 강좌)