336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CreateWindow를 할때 보통 많이 쓰는 윈도우 스타일은 WS_OVERLAPPEDWINDOW이며 여기에는 크기 조정용 WS_THICKFRAME이 포함되어있기때문에 실 작업영역은 (설정한 윈도우 사이즈 - 프레임 사이즈) 만큼 감소되서 나온다.

그럼 온전한 작업영역을 갖기 위해서 어떻게 해야하나...

그거야 당연하지 않은가? 모자란 작업영역을 더해주면 된다!

수치를 일일히 재가지고 더해줘도 되긴하나 규격이랑 Set이랑 세트인 Get은 폼으로 있는게 아니다.

규격이 달라지면 수치를 일일히 잰게 달라질테고 그렇다고 규격마다 #ifdef를 일일히 걸어줄수도 없는 노릇이지 않은가?

이 문제를 해결하기 위해 GetSystemMetrics라는 함수에 대해 알아보기로 한거다.



우선 위의 사이트에 들어가서 무슨 인수가 있는지 쭉 살펴보자.

그럼 위의 인수들 중에서 중요하다고 생각되는것들을 뽑아서 설명하겠다.

1. 작업영역 확보를 위해.
윈도우 창에서 사이즈 오류가 나는 이유는 크게 타이틀바랑 프레임이다.

1-1)  WS_OVERLAPPED / WS_CAPTION
이 둘은 타이틀 바를 가지고 윈도우를 생성하게 해준다.
어찌보면 가장 기본적인 요소.
즉, 이 둘을 포함하고 있을때는 타이틀바 만큼의 사이즈를 포함해줘야한다.
SM_CYCAPTION 를 인수로 높이에 더해주면 된다.

1-2) WS_THICKFRAME / WS_SIZEBOX
사실 두개는 같은 인수.
크기 조절을 할수 있게 해주는 프레임 영역을 생성하여 크기 조절이 가능한 윈도우 창을 만들어준다.
SM_CXSIZEFRAME : 프레임의 가로 길이
SM_CYSIZEFRAME : 프레임의 세로 길이
당연히 CX는 넓이에 CY는 높이에 추가해야되며 양옆으로 프레임바가 있으니 * 2를 해줘야한다.
WS_THICKFRAME을 쓰지 않을때에는
SM_CXBORDER, SM_CYBORDER 를 이용한다

2. 화면을 정 중앙에 설정.
1을 선행한 이유는 2를 시행하기 위해 1이 필요하기 때문이다.
SM_CXSCREEN : 자신의 컴퓨터의 주 모니터의 가로 넓이를 뜻한다.
SM_CYSCREEN : 자신의 컴퓨터의 주 모니터의 세로 높이를 뜻한다.
윈도우 좌표계는 왼쪽위를 기준으로 잡는다.
즉, 윈도우가 중앙으로 오게 할려면 단순히 스크린 중앙을 맞추는게 아니라 거기에 윈도우창의 반만큼 더 빼줄 필요가 있다는거다.
최종적인 공식으로 (모니터/2) - (윈도우/2)를 사용하면 화면 중앙에 오게되는것.


'Programming > C / C++' 카테고리의 다른 글

Named Pipe Server Using Overlapped I/O and Client  (0) 2015.06.12
Windows Named Pipe 구현 간단 정리  (0) 2015.06.11
Singleton  (0) 2015.06.02
URLDownloadToFile example  (0) 2015.05.26
GetCurrentDirectory() vs GetModuleFileName()  (0) 2015.05.22
Posted by 역시인생한방
,