컴퓨터/Win32-API
지난 실습 프로그래밍을 하던 과정 중 도형, 문자, 컨트롤 등을 Window 좌표상에 표시하기 위해서 상당 부분 불편한 점이 많았습니다.
생각한 좌표를 구하기가 힘들기 때문이었습니다.
본문에서는 간단하게 마우스 커서가 위치한 좌표를 얻어올 수 있는 프로그램을 만들어 보도록 하겠습니다.
마우스가 응용프로그램위에서 커서의 형태로 움직이고, 클릭하는 등 다양한 동작에 대해서 이벤트 메시지가 발생하게 됩니다. 본문에서는 그중 마우스가 움직이는 과정에서 생기는 이벤트와 좌표를 얻어 출력하는 프로그램을 만드려고 합니다.
자세한 내용은 아래 링크를 참조하세요.
WM_MOUSEMOVE를 통해서 마우스 커서가 움직이는 과정을 통해 마우스의 프로그램상의 좌표를 얻어보겠습니다.
위 링크를 보시면 WM_MOUSEMOVE 메시지와 lParam으로 x, y의 좌표를 얻을 수 있다고 나와있습니다.
다만 주의할 점은 lParam으로 마우스의 좌표를 안전하게 얻기 위해서는 LOWORD와 HIWORD가 아닌, 좌표를 얻어오기 위한 함수를 사용해 주어야 합니다.
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
이 함수는 windowsx.h 에 포함되어있어 추가해 주어야 합니다.
#include <windowsx.h> //포지션을 구하는 함수를 사용하기 위해서 추가되어야 함.
case WM_MOUSEMOVE:
int x, y;
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
break;
위처럼 WM_MOUSEMOVE 메시지 안에서 좌표값 x와 y값을 받아줍니다.
이제 얻은 좌표값을 통해서 마우스 커서 위에 값을 표시해 보도록 합시다.
case WM_MOUSEMOVE:
int x, y;
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
WCHAR text[100];
wsprintf(text, L" x : %d \t y : %d", x,y);
hdc = GetDC(hWnd);
TextOutW(hdc, x+5, y, text, lstrlen(text));
해당 소스코드를 구동해보니.. 기존에 출력했던 TextOut이 남아서 잔상처럼 남게 되었습니다.
간단하게 x,y를 전역 변수로 넣고 WM_PAINT에서 그리도록 하겠습니다.
case WM_PAINT:
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
TextOutW(hdc, x + 10, y + 10, text, lstrlen(text));
EndPaint(hWnd, &ps);
break;
case WM_MOUSEMOVE:
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
wsprintf(text, L" x : %d \t y : %d", x,y);
InvalidateRect(hWnd, NULL, TRUE);
break;
이렇게 해서 간단하게 마우스 커서를 통해 좌표를 얻어 보는 프로그램을 만들어 봤습니다.
Win32_API - 막대바 컨트롤(Scroll Bar) (0) | 2022.03.07 |
---|---|
Win32_API - WM_PAINT 재호출(InvalidateRect,UpdateWindow) (0) | 2022.03.02 |
Win32_API - 실습 - 색상표 만들기 (0) | 2022.03.01 |
Win32_API - Edit Control 값 사용하기 (inputbox) (0) | 2022.02.28 |
Win32_API - Edit Control (인풋박스,입력창) (0) | 2022.02.25 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet