마우스로 그리기
사용자가 WM_MOUSEMOVE 메시지를 처리하는 동안 창 프로시저를 그리도록 하여 마우스로 선을 그릴 수 있습니다. 시스템은 사용자가 창 내에서 커서를 이동할 때마다 창 프로시저에 WM_MOUSEMOVE 메시지를 보냅니다. 선을 그리기 위해 창 프로시저는 디스플레이 디바이스 컨텍스트를 검색하고 현재 커서 위치와 이전 커서 위치 사이의 창에 선을 그릴 수 있습니다.
다음 예제에서 창 프로시저는 사용자가 마우스 왼쪽 단추를 누르고 있을 때 그리기를 준비합니다( WM_LBUTTONDOWN 메시지 보내기). 사용자가 창 내에서 커서를 이동하면 창 프로시저는 일련의 WM_MOUSEMOVE 메시지를 받습니다. 각 메시지에 대해 창 프로시저는 이전 위치와 현재 위치를 연결하는 선을 그립니다. 선을 그리기 위해 프로시저는 GetDC 를 사용하여 디스플레이 디바이스 컨텍스트를 검색합니다. 그리기를 완료하고 메시지에서 반환하기 전에 프로시저는 ReleaseDC 함수를 사용하여 디스플레이 디바이스 컨텍스트를 해제합니다. 사용자가 마우스 단추를 놓자마자 창 프로시저가 플래그를 지우고 드로잉이 중지됩니다( WM_LBUTTONUP 메시지를 보냅니다).
BOOL fDraw = FALSE;
POINT ptPrevious;
.
.
.
case WM_LBUTTONDOWN:
fDraw = TRUE;
ptPrevious.x = LOWORD(lParam);
ptPrevious.y = HIWORD(lParam);
return 0L;
case WM_LBUTTONUP:
if (fDraw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
fDraw = FALSE;
return 0L;
case WM_MOUSEMOVE:
if (fDraw)
{
hdc = GetDC(hwnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, ptPrevious.x = LOWORD(lParam),
ptPrevious.y = HIWORD(lParam));
ReleaseDC(hwnd, hdc);
}
return 0L;
이 예제와 같이 그리기를 사용하도록 설정하는 애플리케이션은 일반적으로 점 또는 줄을 기록하므로 창이 업데이트될 때마다 줄을 다시 그릴 수 있습니다. 그리기 애플리케이션은 종종 메모리 디바이스 컨텍스트 및 연결된 비트맵을 사용하여 마우스를 사용하여 그린 줄을 저장합니다.