GetSystemMetrics()
Client 영역
: 마우스, 키보드 입력을 받고 출력을 보여주기 위한 영역
Non Client 영역
: Client 이외의 영역 ex) 캡션바, 메뉴, 최대화, 닫기버튼 등

⑴ 클라이언트 좌표계 : 윈도우 클라이언트 영역의 좌상단을 기준 (0,0)으로 한 좌표계
⑵ 윈도우 좌표계 : 윈도우의 좌상단을 기준 (0,0)으로 한 좌표계
⑶ 스크린 좌표계 : 모니터의 좌상단을 기준 (0,0)으로 한 좌표계
ClientToScreen()ScreenToClient()⑴ 마우스 메시지 발생 → (당시의) 마우스 좌표 → lParam
⑵ 마우스 버튼 상태 & 키보드 조합 키(Shift,Ctrl) → wParam
LBUTTONDOWN:
{
POINTS pt = MAKEPOINTS(lParam);
POINT pt1 = { LOWORD(lParam), HIWORD(lParam) };
}
즉, WM_LBUTTONDOWN → lParam에 클라이언트 좌표가 전달된다.
⑴ 마우스 메시지 발생 → 윈도우 좌표 → lParam
⑵ hit-test code → wParam
Hit Test Code
: 현재 커서가 윈도우 어느 부분에 있는지 알려준다.
WM_NCHITTEST 메시지
: 마우스 이벤트 발생 시 가장 먼저 발생되는 메시지
↪ WM_NCHITTEST 메시지는 DefWindowProc()로 전달된다.
DefWindowProc()는 커서의 좌표를 조사해 Hit Test Code를 리턴한다.
case WN_NCHITTEST:
{
DWORD code = DefWindowProc(hwnd, msg, wParam, lParam);
if(code == HTCLIENT && GetkeyState(VK_CONTROL) < 0)
{
code = HTCAPTION;
}
else if (code == HTLEFT)
code = HTRIGHT;
return code;
}
if문code == HTCLIENT : 현재 마우스 위치가 Client 영역에 있는가GetkeyState(VK_CONTROL) > 0 : 현재 Ctrl 키가 눌러졌는가code = HTCAPTION; : HitTestCode 변경이거 코드 무슨 뜻 ??
else if문
code == HTLEFT:
↪ TRUE면,code = HTRIGHT: