2019년 4월 13일 토요일

# Window rect 와 client rect에 대한 관련 내용 (GUI)

작업 영역의 크기는 윈도우 크기에서 타이틀 바와 경계선, 메뉴, 스크롤 바 등의 영역을 제외한 영역이다. 일반적으로 MoveWindow, SetWindorPos 등의 함수로 윈도우 크기는 원하는대로 바꿀 수 있지만 작업 영역의 크기를 원하는대로 설정하는 방법은 없다. 작업 영역을 특정한 크기대로 설정하려면 이 함수로 원하는 윈도우 크기를 먼저 계산하고 MoveWindow 등의 함수로 윈도우 크기를 변경해야 한다.

이 함수는 윈도우의 스타일(타이틀 바의 유무, 타이틀 바의 높이, 경계선의 두께)와 메뉴의 존재 여부 등을 고려하여 작업 영역의 크기가 lpRect가 될 수 있는 윈도우 크기를 구해 lpRect로 리턴해 준다. 단 이 함수는 메뉴 바가 두 줄로 출력되어 있는 경우와 스크롤 바의 존재에 대해서는 정확한 계산을 해 주지 않는다. 만약 스크롤 바를 가지고 있다면 구해진 영역 크기에 스크롤바의 높이와 폭을 더해 주어야 한다.


바로 AdjustWindowRect 이다. 간단하게 실제 작업하는 클라이언트 영역을 조정하는 함수.

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms632665(v=vs.85).aspx

아래 그림처럼, Gui 창을 새롭게 생성하고 입력이벤트 처리가 제대로 동작하는지 확인했는데, 좌표상의 문제가 생겼다.
여러가지 테스트를 거쳐보니.. 역시나 작업영역과 윈도우 크기의 불일치로 생기는 문제였다. 간단하게 위에서 언급한 함수를
이용하면 풀린다. 
 
 

댓글 없음:

댓글 쓰기