Windows 프로그래밍

GDI 시스템의 이해

최문경 블로그 2020. 5. 10. 13:22
 

김성엽의 Windows 프로그래밍 이야기

기본적으로 Windows 프로그래밍을 배운다는 뜻은 Win32 API를 사용한 응용 프로그램을 만드는 방법에 ...

blog.naver.com

김성엽님의 Windows 프로그래밍 이야기를 보고 정리한 글입니다.

 

 

 

마우스 클릭한 위치에 사각형 그리기

 

마우스 클릭한 위치에 사각형 그리기

: Win32 프로그래밍 관련 전체 목차http://blog.naver.com/tipsware/221059977193​이 강좌는 아래에 링크...

blog.naver.com

고정 위치에 사각형 그리기

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);
}