윈도우 프로그래밍 - 이벤트 처리

상준·2025년 9월 5일

문자열 상수 정의

WndProc()함수에 추가

LPCSTR szMsg4 = "마우스가 눌러졌습니다.";	// 마우스를 눌렀을 때 출력될 문자열
LPCSTR szMsg5 = "마우스가 이동 중입니다.";	// 마우스가 이동 중일 때 출력될 문자열

LPCSTR: 읽기 전용 문자열

마우스를 움질일 경우(WM_MOUSEMOVE)

case WM_MOUSEMOVE:
	hdc = GetDC(hwnd); // hdc 초기화
	GetClientRect(hwnd, &rect);
	DrawText(hdc, szMsg5, strlen(szMsg5), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	ReleaseDC(hwnd, hdc);
	break;

GetDC(): DC(Device Context) 핸들을 얻음
GetClientRect(): 사각형 구조체 좌표를 구함
DrawText(): 문자열을 출력
ReleaseDC(): DC 해제

왼쪽 마우스가 떼어진 경우

case WM_LBUTTONUP:
	InvalidateRect(hwnd, NULL, TRUE);
	MessageBox(hwnd, "마우스가 떼어졌습니다.", "마우스 메시지", MB_OK | MB_ICONASTERISK);
	break;

InvalidateRect() 함수: 출력된 문자열을 지움, DC 핸들을 얻을 필요가 없음


마우스 좌표 출력

POINT 구조체

windows.h 파일에 정의되어 있음

typedef struct tagPOINT{
	LONG x;
    LONG y;
}POINT;

한 점의 x, y좌표를 정의하는 구조체


위치를 저장하는 변수 선언

POINT MousePoint;

마우스 좌푯값 메시지를 출력

LPSTR szMsg6 = new char[10];
  • LPSTR: 수정 가능한 문자열
MousePoint.x = LOWORD(lParam); // x 좌푯값
MousePoint.y = HIWORD(lParam); // y 좌푯값

wsprintf(szMsg6, "X:%ld, Y:%ld", MousePoint.x, MousePoint.y);
TextOut(hdc, MousePoint.x, MousePoint.y, szMsg6, strlen(szMsg6));
  • 좌푯값은 WndProc() 함수의 lParam 매개변수를 통해 전달됨
  • wsprintf() 함수: 윈도우에 문자열에 원하는 형식에 맞게 출력
  • TextOut() 함수: 문자열을 윈도우에 출력

.exe을(를) 쓰기용으로 열 수 없습니다.

위와 같은 오류는 해당 파일이 열려있는 경우 나타남
-> 종료하면 됨

profile
컴공생 공부

0개의 댓글