응용프로그램 내에 window영역에 자식 window를 만들어 추가가능
좌표계의 종류와 좌표값을 변환하는 방법이 있음.
Window 좌표는 모니터화면을 기준으로 하는 절대 좌표계
CRect r;
GetWindowRect(r); // 현재 윈도의 '윈도우 영역에 대한 좌표'를 구함
클라이언트 영역은 개별 윈도우를 위한 상대적 좌표.
클라이언트 영역은 그냥 프로그램 내에 그 화면임.
CRect r;
GetClientRect(r); // 현재 윈도우의 '클라이언트 좌표'를 구함
버튼을 윈도우에 생성했다치자.
그때 생기는 버튼도 윈도우좌표, 클라이언트 좌표가 생긴다.
전체영역이 무효화 됐을 때 다시 유효화 되었을 때 발생하는 메시지이다.
이때 BeginPaint(), EndPaint() 함수를 사용함.
ValidateRect()
를 사용함.함수원형
BOOL ValidateRect(HWND hWnd, const RECT *lpRect);
이렇게 사용함.
// 유효화할 영역을 RECT 자료형으로 선언된 변수에 설정
REECT r = {50, 50, 200, 300};
// hWnd 윈도우의 r영역을 유효화 시킴
ValidateRect(hWnd, &r); // &r을 NULL로 하면 윈도우 전체영역을 의미함.
WM_PAINT 는 플래그성 메시지이다.
BeginPaint()를 쓰고 꼭 EndPaint()를 사용하는 등 DC에 비활성화 하게끔 설정을 해줬어야함.
근데 ValidateRect()를 사용하면 그냥 깔끔하게 WM_PAINT 메시지를 리셋시킬 수 있음.
프로그램 종료 확인창을 만들어보자.
프로그램의 X창을 누르면 WM_CLOSE메시지가 나옴.
이메시지가 DefWindowProc에 전달되지 않게 해야 윈도우가 닫히는걸 막을 수 있음.
else if (uMsg == WM_CLOSE) {
int check =MessageBox(hWnd, L"프로그램을 종료하시겠슴미깡?",
L"Sihwan Window 종료 확인!", MB_ICONQUESTION | MB_OKCANCEL);
if (IDCANCEL == check) return 0;
}
else if (uMsg == WM_DESTROY) PostQuitMessage(0);
여기서부터
WM_MOVING 메시지 사용하기