WinAPI로 그림 그리기를 해보려고 한다!
visual2019로 윈도우 데스크탑을 이용할 예정이다. 콜백 함수만 약간 고치면 될 거 같다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static POINT MousePos; //마우스 x,y 좌표를 저장할 변수
static BOOL bDrawing = FALSE;
switch (message)
{
case WM_LBUTTONDOWN:
MousePos.x = LOWORD(lParam);
MousePos.y = HIWORD(lParam);
bDrawing = TRUE;
SetCapture(hWnd);
return 0;
case WM_MOUSEMOVE:
if (bDrawing)
{
hdc = GetDC(hWnd);
MoveToEx(hdc, MousePos.x, MousePos.y, NULL);
MousePos.x = LOWORD(lParam);
MousePos.y = HIWORD(lParam);
LineTo(hdc, MousePos.x, MousePos.y);
ReleaseDC(hWnd, hdc);
}
return 0;
case WM_LBUTTONUP:
bDrawing = FALSE;
ReleaseCapture();
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
case 에 WM_LBUTTONDOWN, WM_MOUSEMOVE, WM_LBUTTONUP 조건을 추가해주었다.
변수 선언에 static을 왜 사용해주었을까 해서 빼보고 컴파일 확인해보았다.
POINT 함수는 선언에 컴파일러가 에러가 떴고 BOOL 값 변수는 전역변수 대신해서 사용하려고 예제에서 static을 선언해 둔 거 같다.
타이핑 때 그림이 제대로 안 그려졌는데 x값,y값 둘 다 LOWORD를 줘서 난 에러였다.
LOWORD(lParam)에 의해 마우스 X좌표 값, HIWORD(lParam)에 의해 마우스 Y좌표 값을 반환한다!
실행화면
'WinAPI' 카테고리의 다른 글
마우스 클릭 이벤트 (0) | 2021.09.29 |
---|