如何将屏幕鼠标坐标转换为POINTS结构

问题描述:

我必须为自定义绘制的WPF窗口发送一些手动Windows消息。具体来说,当用户在标题栏中将鼠标放下时,我不得不手动发送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参数?

lParam = x | (y << 16); 

其中x和y是坐标。

从邮件中提取值:

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

非常感谢 - 工作的一种享受。 – Avram 2013-02-27 14:02:39

+0

这将失败,并带有负面的鼠标坐标。 – arx 2013-02-27 17:05:57

对方回答将失败,负鼠坐标,这当你有多个监视器您可能会看到。我认为这将工作:

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

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

如果有其他人试图弄清楚为什么这在Java中不起作用,那么Java会使用int进行按位操作。所以即使你把它缩短它也不适用于负x值 – acheron55 2015-01-06 00:03:16