써드아이 2010. 10. 14. 23:34

① INT nX = LOWORD( lParam );
    INT nY = HIWORD( lParam );

② INT nX = (INT)(SHORT) LOWORD( lParam );
    INT nY = (INT)(SHORT) HIWORD( lParam );

LPARAM 이 마우스 포인트 일 때 위 두개의 문장이 무슨 차이가 있을까?
어차피 상위 16 비트는 y 값,  하위 16 비트는 x값으로 동일 하다.

하지만 SetCapture() 함수와 연결 되었을 때 얘기는 달라진다.
어플의 화면 영역 좌표를 x1, y1, x2, y2라고 할 때
SetCapture 함수가 실행되면 ReleaseCapture 함수가 실행 되기 전까지
마우스가 x1, y1, x2, y2 영역을 벗어나도 메세지를 받을 수 있게 되는데..
마우스가 x1, y1 영역으로(마이너스 쪽으로) 벗어나는 경우에 대해서 

① 는 정확한 값을 가져오지 못 한다. 65535 만 계속 가져오고
② 와 같이 사용해야 정확한 마이너스 값을 읽을 수 있다.

물론 플러스 쪽으로는 아무 문제 없고...


이거 때문에 또 얼마나 많은 삽질의 시간을 보낸건지.....