본문 바로가기

Win32 API

13. Win32 API - 윈도우 좌표

윈도우에서의 좌표

Windows 운영체제에서 Window는 다른 Window를 소유할 수 있기 때문에
절대적인좌표와 상대적인 좌표 개념을 동시에 가지게 됩니다.

 

 

1. Window 영역 좌표

윈도우 좌표는 모니터 화면을 기준으로 하는 절대 좌표계입니다.
해당 좌표계에서는 모니터 화면의 좌측 상단이 (0, 0)이 됩니다.
윈도우 영역은 캡션과 테두리를 포함하기 떄문에 좌표 계산 시에 주의해야 합니다.

 

2. GetWindowRect - Window 영역 좌표값을 얻는 함수

https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getwindowrect

 

GetWindowRect 함수(winuser.h) - Win32 apps

지정된 창의 경계 사각형의 차원을 검색합니다. 차원은 화면의 왼쪽 위 모서리를 기준으로 하는 화면 좌표로 제공됩니다.

learn.microsoft.com

BOOL GetWindowRect(
  [in]  HWND   hWnd,
  [out] LPRECT lpRect
);
RECT 구조체에 현재 윈도우 영역의 좌표값을 반환해 줍니다.

 

3. GetClientRect - 클라이언트 영역의 좌표를 얻는 함수

https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getclientrect

 

GetClientRect 함수(winuser.h) - Win32 apps

창 클라이언트 영역의 좌표를 검색합니다.

learn.microsoft.com

BOOL GetClientRect(
  [in]  HWND   hWnd,
  [out] LPRECT lpRect
);

 

개별 윈도우를 위한 상대적인 좌표계입니다.
윈도우의 캡션과 테두리를 제외한 영역이며 클라이언트 영역의 좌측 상단 (0, 0)이 되기 때문에
화면 좌표와 상관이 없습니다.
윈도우에 그림을 그릴 때 사용하는 기본 좌표계가 클라이언트 영역의 좌표계라서 윈도우가 이동 시 그린 그림도 윈도우의 일정한 위치에서 그려집니다.

 

4. 자식 윈도우의 클라이언트 영역 좌표 얻기

확인 버튼의 윈도우 영역 좌표 구하기

윈도우 영역 좌표 구하기

CRect r;

CWnd *p_ok_btn = GetDlgItem(IDOK);
if(NULL != p_ok_btn){
	p_ok_btn->GetWindowRect(r);
}
자식 버튼의 Window 좌표(절대 좌표계)를 구합니다.

 

클라이언트 영역 좌표 구하기

CRect r;
CWnd *p_ok_btn = GetDlgItem(IDOK);
if(NULL != p_ok_btn){
	p_ok_btn->GetWindowRect(r);
	ScreenToClient(r);
}
자식 버튼의 Window 좌표(절대 좌표계)를 ScreenToClient함수로 Client 영역 좌표계로 변환합니다.
자식 윈도우의 상대적인 좌표를 알아내서 그리기를 수행할 수 있습니다.

 

 

5.  참조

https://blog.naver.com/tipsware/220974096116

 

윈도우 좌표 구성에 대하여

windows 운영체제에서 Window는 다른 Window를 포함(소유) 할 수 있기 때문에 '절대적인 좌표'와 '상대적...

blog.naver.com

 

'Win32 API' 카테고리의 다른 글

15. Win32 API - GDI+  (0) 2024.03.16
14. Win32 API - StockObject  (0) 2024.03.09
12. Win32 API - 무효화 / 유효화 영역  (0) 2024.03.06
11. Win32 API - Bitmap  (0) 2024.03.02
10. Win32 API - DC 개요  (0) 2024.02.24