김성엽님의 Windows 프로그래밍 이야기를 보고 정리한 글입니다.
마우스 클릭한 위치에 사각형 그리기
고정 위치에 사각형 그리기
LRESULT CALLBACK WndProc(HWND hWnd, UNIT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_LBUTTONDOWN) {
HDC h_dc = GetDC(hWnd);
Rectangle(h_dc, 10, 10, 100, 100);
ReleaseDC(hWnd, h_dc);
} else if (uMsg == WM_DESTROY) PostQuitMessage(0);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
클릭한 위치에 사각형 그리기
WndProc함수에서 uMsg에 WM_LBUTTONDOWN 메시지가 전달되었을 때 lParam에 마우스가 클릭된 좌표 값이 저장되어있다. 그런데 좌표는 (x, y)로 구성되어있다. 그래서 lParam의 하위 16비트에는 x좌표의 값이 들어가있고, 상위 16비트에는 y좌표의 값이 들어가있다. 따라서 아래와 같이 코드를 작성한다.
LRESULT CALLBACK WndProc(HWND hWnd, UNIT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_LBUTTONDOWN) {
int x = LOWORD(lParam);
int y = HIWORD(lParam);
HDC h_dc = GetDC(hWnd);
Rectangle(h_dc, x-10, y-10, x+10, y+10);
ReleaseDC(hWnd, h_dc);
} else if (uMsg == WM_DESTROY) PostQuitMessage(0);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
'Windows 프로그래밍' 카테고리의 다른 글
Windows 운영체제는 화면에 그림을 어떻게 출력하는가? (0) | 2020.05.09 |
---|---|
Windows 프로그래밍 맛보기와 프로그램 구성 파악하기 (0) | 2020.05.09 |
자신만의 Window를 사용하려면 자신만의 'Window Class'를 만들자 (0) | 2020.05.07 |
기본적으로 알아야 할 용어와 개념에 대하여 (0) | 2020.05.07 |