2013-02-27 4 views
0

사용자가 직접 그린 WPF 창을 보내기 위해 몇 가지 수동 창 메시지를 보내야합니다. 특히, 사용자가 제목 표시 줄에 마우스를 놓았을 때 WM_NCLBUTTONDOWN 메시지를 수동으로 보내야합니다.화면 마우스 좌표를 POINTS 구조체로 가져 오는 방법

지금까지 내가 가진 :

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 

재미있는 부분이의 lParam에 넣어 값을 받고있다. 마우스의 X 및 Y 좌표를 나타내는 Int32 (DWORD) 여야합니다.

필요한 구조를 만들기 위해 macro defined이 있지만 도움이되지 않습니다. 따라서 질문은 다음과 같습니다.

WPF 창에서 lParam 인수로 전달 된 올바른 값으로이 메시지를 올바르게 표시하려면 어떻게해야합니까?

답변

2
lParam = x | (y << 16); 

여기서 x와 y는 좌표입니다.

메시지에서 값을 추출하려면

int x = lParam & 0xFFFF; 
int y = (lParam >> 16) & 0xFFFF; 
+0

고맙게도 - 대우를받습니다. – Avram

+0

네거티브 마우스 좌표에서는 실패합니다. – arx

1

다른 대답은 여러 모니터를해야 할시기를 볼 수 있습니다 부정적인 마우스 좌표, 실패합니다. 나는 이것이 작동 할 것이라고 생각한다 :

int lParam = (ushort)x | (y << 16); 

x = (short)lParam; 
y = (short)(lParam >> 16); 
+0

Java에서이 기능이 작동하지 않는 이유를 알아 내려고하는 다른 사람들이있는 경우 Java는 int로 비트 연산을 수행합니다. 그래서 그것을 짧게 던지더라도 음의 x 값에는 작동하지 않습니다. – acheron55

관련 문제