2009-12-07 4 views

답변

7

은 일반 Win32에서 가정 API는 WM_LBUTTONDOWN에 대한 핸들러에서 이것을 사용

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 
+2

정답입니다. 사용자가 클릭했을 때 마우스 *가 어디에 있었는지 알려주므로 메시지를 처리 ​​할 때 (이동했을 수도 있음) 대신 * * * 표시됩니다. –

1

GetMouseMovePointsEx으로 전화하면 마우스의 위치와 기록을 알 수 있습니다. 또는 wndproc에 액세스 할 수있는 경우 x, y 좌표에 대한 WM_MOUSEMOVE, WM_LBUTTONDOWN 또는 이와 유사한 메시지의 lparam을 확인할 수 있습니다.

+0

이 작품은 DPI 스케일링은 예를 들어 윈도우 7 또는 윈도우 10에서 수행되는 것인가 마우스 왼쪽 버튼을 클릭에이 문제를 처리 할 가정 %로 설정 한 다음 100 %로 설정하면이 방법이 계속 작동합니까? 응용 프로그램에서 문제가 발생하여 작동하지 않습니다. 로그 아웃 할 때 모든 것이 잘 작동하고 다시 로그인하십시오. –

1
xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 
bool find(xPos,yPos); 

가 이제 좌표에서 x와 마우스 포인터의 y 위치를 얻을 것이다. xPos 및 yPos는 길어야합니다.

bool find(long x,long y); 

내부에서 xPos 및 yPos가 화면 좌표의 개체 아래에 있는지 확인합니다. 초기 DPI 스케일링 값이 150 인 경우

-1
POINT p; //You can use this to store the values of x and y coordinates 

은 이제

case WM_LBUTTONDOWN: 
     p.x = LOWORD(lParam); //X coordinate 
     p.y = HIWORD(lParam); //Y coordinate 
     /* the rest of your code */ 
     break; 
+1

MSDN에서 비유 WM_LBUTTONDOWN : LOWORD 또는 HIWORD 매크로를 사용하여 여러 모니터가있는 시스템에서 잘못된 결과를 반환하기 때문에 커서 위치의 x 및 y 좌표를 추출하지 마십시오. 여러 모니터가있는 시스템은 음의 x 및 y 좌표를 가질 수 있으며 LOWORD 및 HIWORD는 좌표를 부호없는 수량으로 처리합니다. – user2120666

+1

@ user2120666 MSDN에서 일부 예제 (예 : https://msdn.microsoft.com/en-us/library/windows/desktop/dd162493%28v=vs.85%29)에서 계속 사용하고 있습니다. aspx) –

관련 문제