如何将屏幕鼠标坐标转换为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;
答
对方回答将失败,负鼠坐标,这当你有多个监视器您可能会看到。我认为这将工作:
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
非常感谢 - 工作的一种享受。 – Avram 2013-02-27 14:02:39
这将失败,并带有负面的鼠标坐标。 – arx 2013-02-27 17:05:57