개발자 블로그
윈폼 NONE 스타일 창 최대화하는 경우 작업표시줄 가리지 않게하기 본문
C# Winform의 FormBorderStyle을 None으로 설정한 경우(또는 CreateParams를 통해서 WS_CAPTION 스타일 속성을 제거한 경우) 창을 최대화하게 되면 작업표시줄까지 덮어버리는 문제가 생긴다.
최대화 버튼을 클릭했을 때, 아래 코드를 사용해서 창을 최대화 시키면 이러한 문제가 발생하는데
Form.WindowState = FormWindowState.Maximized;
대략 두 가지 해결 방법이있다.
1. 직접 사이즈를 설정
말 그대로 폼의 사이즈를 직접 입력한다. 시스템속성을 통해서 WorkingArea를 조회 한 뒤에 해당 크기로 폼의 크기를 설정한다. 예제 코드는 아래 링크를 참조.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=41511&ref=41508
2. MaximizedBounds 프로퍼티 사용
최대화 할 때 창의크기를 설정 할 수 있는 프로퍼티를 이용하는 방법이다. Form.MaximizedBounds를 WorkingArea로 설정해주면 된다.
this.MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea; this.WindowState = FormWindowState.Maximized;
다만, 윈도우10에서는 약간의 문제가있다. (윈도우7, 윈도우8에서는 테스트 안해봐서 모름.) WorkingArea 조사한 값으로 설정을 해도 화면에 꽉차지 않고 약간의 여백이 생긴다. 보이지 않는 테두리 영역이 있는 것 같은데.. "칼무리" 같은 캡처 프로그램을 이용해서 활성창을 캡처해보면 무슨 말인지 알 수 있을거다.
그래서 MaximizedBounds 영역을 조금 수정해줘야 된다. 아래는 그 코드
Rectangle bounds = Screen.FromHandle(this.Handle).WorkingArea; int x_offset = SystemInformation.HorizontalResizeBorderThickness + SystemInformation.FixedFrameBorderSize.Width; int y_offset = SystemInformation.VerticalResizeBorderThickness + SystemInformation.FixedFrameBorderSize.Height; bounds.X -= x_offset; bounds.Width += (x_offset * 2); bounds.Height += y_offset; //this.MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea; this.MaximizedBounds = bounds; // 창 크기 최대화 처리 this.WindowState = FormWindowState.Maximized;
참고사이트
1) http://stackoverflow.com/questions/6415099/full-screen-mode-but-dont-cover-the-taskbar
2) http://stackoverflow.com/questions/35259756/wpf-and-windows-10-invisible-border-around-windows
'프로그래밍 > Windows' 카테고리의 다른 글
카카오톡PC에서 사용하는 오픈소스 라이브러리 (0) | 2016.03.18 |
---|---|
C# 이미지 저작 툴을 개발하면서 참조한 사이트들 (0) | 2016.03.08 |
C# resx 리소스 문자열 개행처리 (0) | 2016.02.25 |
C#에서 ini 파일 읽고, 쓰기 (0) | 2016.02.16 |
64bit 윈도우에서 32bit 프로그램 레지스트리 저장위치 (0) | 2015.08.09 |