삽질의 현장/- .NET

#098_닷넷(.NET)_ WinForm - 그리기 (Graphics)

shovelman 2015. 11. 23. 16:36



안녕하세요 삽잡이입니다.


이번시간에는 WinForm에 있는 기능 중에서

그리기에 대해서 알아보고자 합니다.



세세하게 다루지 않고, 

가볍게 읽으며 넘어가는 식으로 글을 쓰고자합니다.

기존에 Window Native 영역인 

API에 대한 이해가 없으시다면 이해가 잘 안가실 수 있으니, 

API 부분부터 다시 보시는 것 또한 추천드립니다!

   




Paint 이벤트에 대한 핸들러를 만들게 되면,

해당 메서드에는 인수로 PaintEventArgs 라는 형식의 인자가 넘겨옵니다.


 


Graphics 객체가 하나 들어오는 것입니다.

이를 통해서 간단한 그리기를 할 수 있지요.


Graphics 객체는 그리는데 필요한 객체입니다.

이전에 API를 가지고 놀 때 DC 객체를 얻었었죠.

이처럼 WinForm에서는 Graphics 객체를 얻어야합니다.



이런식으로 Graphics 핸들러를 얻어와서 그릴 수 있게 됩니다.


WinForm도 기존에 그리기 방식과 같습니다.

그리기 방식에는 두가지가 있지요.


1. Paint 이벤트가 발생했을 때, 그리기 방식.

2. Paint 이벤트가 발생하지 않았을 때, 그리기 방식.



Paint 핸들러에서 그리게 될 때에는,

인자로 넘어온 PaintEventArgs 값을 통해 그려기를 진행해주면 되지만,


Paint 핸들러가 아니라면,

Graphics 객체를 통해 handle을 얻어와 그려줘야합니다.


그런데, Paint 이벤트 발생시 

기존에 있던 내용들을 다시 그려줘야하기 때문에

데이터를 유치하기 위한 

즉, 데이터를 보관하기 위한 Collection이 필요로 합니다.



그리고 Paint 이벤트 자체가 화면에 그려주기 위한 이벤트이기 때문에

데이터가 추가되었다면, Invalidate() 메서드를 통해서 Paint 이벤트를 호출함으로써

다시 그려주게 할 수 도 있습니다.




참고로, WinForm에서 사각형을 그릴 경우에는

기존 API에서는 시작 좌표와 끝좌표를 알아야했지만,

WinForm에서는 시작 좌표와 높이, 넓이를 제공해줘야 사각형이 그려집니다.


이번시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!



<참고 : C# and the .NET4 Platform>