WM_PAINT에 대해서 다뤄볼 것입니다.
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
EndPaint(hWnd, &ps);
}
break;
일단 먼저 BeginPaint 로 시작해서 EndPaint 로 끝나는 것이 있다.
이처럼 세트로 묶여져 있는 것은 대부분 메모리 할당 하고나서 해제해는 함수이다.
//RECT r; //사가형의 lefttop, right bottom
//SIZE s; //가로세로 길이 (width, height)(horizontal, vertical)
//POINT p; //좌표 //--> 이 3개 구조체는 꼭 알아두기!
이 3개 구조체는 많이 쓰인다고 알아두면 좋다고 했다.
RECT rt;
GetClientRect(hWnd, &rt); //window창 좌상을 0,0
RECT rt2;
GetWindowRect(hWnd, &rt2); //모니터의 좌상을 0,0
RECT 구조체를 이용해서 GetClientRect를 이용하면 hWnd(윈도우창)의 좌상을 0,0으로 하는 사각형을 얻을 수 있다.
WCHAR str[32] = TEXT("호랑이");
int len = wcslen(str);
DrawText(hdc, str, wcslen(str), &rt, DT_LEFT);
DrawText(hdc, str, wcslen(str), &rt, DT_CENTER);
DrawText(hdc, str, wcslen(str), &rt, DT_RIGHT);
DrawText(hdc, str, wcslen(str), &rt, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
DrawText(hdc, str, wcslen(str), &rt, DT_RIGHT | DT_SINGLELINE | DT_VCENTER);
DrawText(hdc, str, wcslen(str), &rt, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
DrawText(hdc, str, wcslen(str), &rt, DT_SINGLELINE | DT_BOTTOM);
DrawText(hdc, str, wcslen(str), &rt, DT_SINGLELINE | DT_BOTTOM | DT_CENTER);
DrawText(hdc, str, wcslen(str), &rt, DT_SINGLELINE | DT_BOTTOM | DT_RIGHT);
DrawText로 윈도우 창에 우리가 쓰고자 하는 Text를 나타낼 수 있다.
코드 3개씩 묶은 것이 그림의 파란색선으로 묶은 것과 매칭된다.
*주의: 세로로 중간에 하기 위해서는 DT_SINGLELINE이 필요하다.
이번에는 마우스가 움직일 때마다의 좌표 나타내는 예제를 해보겠습니다.
int mx, my; //전역함수에 mx, my를 해준다.
case WM_MOUSEMOVE:
{
int x = LOWORD(lParam);
int y = HIWORD(lParam);
mx = x;
my = y;
//프로그래머가 특정 메세지를 발생 시킬 수 있다. --WM_PAINT 만약 없다면 화면 자동 갱신이 안일어남 -WM_PAINT가 발생하지 않아서
InvalidateRect(hWnd, NULL, TRUE);
}
mx, my는 마우스의 좌표
WM_PAINT는 윈도우가 다시 그려질 때 발생하는데 InvalidateRect 함수로 수동으로 발생시켜준다.
WCHAR str[32] = TEXT("호랑이");
int len = wcslen(str);
위엣 썼던 이함수를 이용한다.
wsprintf(str, TEXT("%d %d"), mx,my);
TextOut(hdc, mx, my, str, wcslen(str));
TextOut도 DrawText와 같이 Text를 나타내주는 함수이다.
TextOut (주체, text의 위치의 x좌표, text의 위치의 y좌표 , str ,str 크기)
여기서 중요한건 InvalidateRect() 함수를 써주는 것이 중요!
'비트교육 > API' 카테고리의 다른 글
API(7) - realtime 방식과 button ,setTimer (0) | 2020.09.05 |
---|---|
API(6) -WinMain함수 알아보기 (0) | 2020.09.05 |
API(4) -win32의 WndProc에 대해 알아보기! (0) | 2020.09.03 |
API(3) -win32의 WinProc에 대해 알아보기! (0) | 2020.09.03 |
API(2) (0) | 2020.09.03 |