티스토리 뷰

IT

[API] 윈도우 마우스 절대좌표 계산 이해하기 65535

주인장 진빼이

2년전인가 몇년 전에도 분명 알고 있었는데 시간이 지나 잊어먹었다.

이젠 다음에도 잊으면 빠르게 이해하기 위해 포스팅으로 남겨본다.

 

절대적 좌표를 설명을 하기 전에 X 좌표, 가로크기에 대해서만 알아볼 것이다.

방법은 X와 동일하기에 Y를 따로 설명하지 않는다.

 

마우스 제어 코드를 사용하다보면 다음과 같은 식을 볼 수 있다.

이는 마우스의 절대적 좌표로 변환하는 공식이다.

 

절대적 좌표.. 말이 어려울 수도 있지만

절대적 좌표란 쉽게 말해 변하지 않는 고정적인 크기 또는 좌표를 말하는 것이다.

(posX * 65535) / 1920
(65535 / 1920) * posX

 

 

아래 그림을 자세히 살펴보자

마우스의 절대적 좌표는 좌상단(0,0)부터 우하단(65535,65535)로 구성되어 있다.

65535라는 수치는 2^16-1을 의미하는데 이는 unsigned short(2byte) Max Value를 의미하기도 한다.

 

해상도 가로 크기가 4000이든 3000이든 얼마나 크든 상관없이 마우스는 폼이나 컨트롤 위치가 아닌

마우스의 절대적 좌표계를 사용하여 마우스를 이동시키고 제어하는 것이다.

 

사용된 식은 스크린의 좌표를 마우스의 절대적 좌표계로 변환하여 최종 목적지 좌표를 산출한다고 보면 된다.

 

간단한 계산을 통해서 알아보자.

현재 스크린은 FHD(1920x1080) 크기를 가지고 있다고 가정해보자.

마우스는 스크린 크기와 상관없이 65535 라는 최대 영역의 크기를 가지고 있는 것이다.

 

만약에 내가 마우스를 정 가운데로 SendInput 함수를 통해 이동시킨다고 생각해보자.

아래 그림에 ?에 해당하는 마우스의 절대적 좌표 X는 대략 얼마가 되어야할까?

 

마우스의 절대적 좌표 최대 크기가 65535니까

당연히 65535를 절반 크기로 나눈 값인 약 32767이 되면 된다.

하지만 API 함수를 사용하다보면 스크린 좌표를 기준으로 좌표를 얻는 경우가 많다.

이제 식을 통해 변환하자.

 

먼저 1920 을 절반으로 나누면 960이 된다.

960을 이제 절대적 좌표계로 변환할 것이다.

짜잔!

32767이 정상적으로 나온다.

 

이제 어떤 흐름인지 이해가 되지 않는가?

1920은 최대 해상도 가로 크기이고

960은 내가 마우스를 이동시킬 최종 목적지의 스크린 X좌표이고

65535는 절대적 마우스 좌표계의 최대 영역이다.

 

식을 해석해보면 

" 최대 가로 크기가 1920인 스크린 기준에서 가로 960 위치에 해당하는 절대적 마우스좌표 X로 변환해라! "

이런 의미가 되는 것이다.

 

최대 기준에서 정해진 위치를 구하는 것이기에 백분율 계산과 비슷하다고 볼 수 있다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함