C#,Delphi,Oracle,MSSQL 개발자블로그

WinForm과 WPF 2 본문

Programming/C#

WinForm과 WPF 2

19760323 2018. 7. 12. 16:31

앞선 글에 이어 WPF의 존재 이유를 좀더 따져보자.

 

간단할 것 같은(?) 어플리케이션을 한번 생각해 보자.

 

'45도 기울어진 버튼을 가진 윈도우 기반 어플리케이션 만들기'

 

일단 WPF로 만든다고 하면 아주 쉽다.

메인 윈도우에 Button을 하나 올려두고, 그 Button의 RenderTransform 속성에 new RotateTransform(45)를 하게 되면 끝이다.

그러면 Button안의 Text도 기울어져서 나타나고, 마우스 클릭도 기울어진 버튼 영역에서만 반응한다.

 

그러면 WinForm으로 만든다고 해 보자.

메인 Form에 Button을 하나 올려놓는다. 그러나 Button의 속성을 살펴봐도 딱히 회전시켜 줄 만한 속성은 없다.

난감해지기 시작한다.

 

WinForm의 컨트롤들은 모두 사각형이 그 기본형태다. 또한 그 컨트롤 영역 전체를 회전시키는 속성따위는 없다.

이것은 Win32Api를 직접사용하더라도 (CreateWindow로 생성한 윈도우) 마찬가지다.

 

그렇다고 아예 방법이 없는 것은 아니다. WIndows 운영체제에 있는 Region객체를 사용하면 된다.

(Region의 자세한 내용은 MSDN을 찾아보도록 하고,)

45도 정도 기울어진 버튼이 들어갈 사각형 만큼의 크기로 Button의 크기를 세팅하고 기울어진 사각형 모양으로 Region을 만든다.

그리고 그 Region을 Button의 Region 속성에 세팅하면 일단 기울어진 모양의 Button을 만들 수 있다.

이렇게 하면 Region영역 안으로만 Paint를 제한 할 수 있고, 또한 마우스 이벤트도 Region영역 안에서만 일어나게 된다.

 

하지만 여기서 끝이 아니다.

Button안의 Text도 기울여서 그려줘야 한다. 또한 Button의 Border부분(버튼이 돌출되도록 보여주는)도 기울어진 Line으로 일일이 다시 그려줘야 한다.

만약 10도, 20도, 30도 등등의 여러 각도로 기울어진 버튼이 여러개 들어가야 한다면 각 기울기에 해당하는 Region을 다시 만들어야 한다. 그리고 결정적인 것은, 버튼의 크기가 변하면 그 크기 변경에 따라 Region을 다시 만들어서 세팅해야 한다. 음...

 

이쯤되면 WPF 존재의 당위성이 어느정도 확보되는 것 같다.

 

사용자의 눈높이가 높아짐에 따라 좀더 화려하고 다양한 UI가 필요한데, 단순히 사각형 영역의 컨트롤들 만으로는 한계가 있을 것이다.

따라서 다양한 모양의 컨트롤을 구현하기 위해서, 기존의 Windows 운영체제의 윈도우를 사용하는 대신, 직접 Drawing하고 이벤트 처리하는 프레임워크를 만드는 것이 낳다는 결론에 도달하는 것은 어찌보면 당연한것 같다.

 

그리고 이건 내 개인적인 생각인데,

이렇게 운영체제의 윈도우를 기반으로 하는 UI가 아니라, 직접 Drawing하는 UI라면 다른 플랫폼으로 포딩하기도 쉽지 않을까 생각한다.

일반적으로 윈도우 시스템은 각 운영체제마다 그 구현이나 사용법이 상이해서 쉽게 포팅하기 쉽지 않은데, WPF같은 프레임워크라면 Drawing하는 부분만 다른 플랫폼에 맞춘다면 프레임워크에서 직접 컨트롤들을 다루기 때문에 쉽게 포팅할 수 있을 것 같다는 생각이 든다.

 

Comments