▶ 윈도우 프로시저를 보자.
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
char str[] = "";
}
HDC -> 핸들 DC를 의미한다.
PAINTSTRUCT -> 말 그대로 페인트 구조체이다.
★
여기서 char[]하고 char* 에 대해 생각해봐야한다.
윈도우 프로시저에 대해 이어서 하자면,
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
char str[] = "";
switch(iMessage)
{
case WM_CREATE:
break;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
~~~
EndPaint(hWnd,&ps);
break;
}
}
switch함수 안에 WM_PAINT인 케이스가 있다.
이 곳에서 출력에 관한 모든 것을 담당하는 곳이다. ( 문자, 그림, 도형등등 화면에 보이는 모든 것들을..)
그동안 배웠던 cout, printf함수는 쓰지 않고 API에서만의 출력문장은
TextOut(hdc, x, y ,문자열, 문자열 길이);
이러한 출력문장으로 쓰일것이다.
따라서, 예시를 들자면
TextOut(hdc,300,300,"너무 힘들다", strlen("너무 힘들다"));
이런 예시를 들 수 있다는 것이다.
MoveToEx() 함수를 이용하여 선의 시작점을 알리고
LineTo() 함수를 이용하여 선의 끝점을 지정해주면 된다.
예시를 들자면
MoveToEx(hdc,400,400,NULL);
LineTo(hdc,200,400);
그렇다면 x좌표 : 400, y좌표 : 400 인 시작점에서 x좌표 : 200, y좌표 : 400인 끝점으로 선이 그어진다.
(물론 case WM_PAINT: 이 안에 써야한다.)
WM_LBUTTONDOWN -> 왼쪽 마우스 버튼이 눌렀을 경우에 발생하는 이벤트
WM_RBUTTONDOWN -> 오른쪽 마우스 버튼이 눌렀을 경우에 발생하는 이벤트
마우스 버튼을 눌렀을 경우에 Paint와는 다르게
case WM_LBUTTONDOWN:
hdc = GetDC(hWnd);
~~~
ReleaseDC(hWnd,hdc);
break;
이렇게 시작해야 한다.