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

时间:2013-02-27 11:43:18

标签: c# wpf winapi

我不得不为自定义绘制的WPF窗口发送一些手动窗口消息。具体来说,当用户在标题栏中鼠标左键时,我不得不手动发送WM_NCLBUTTONDOWN消息。

到目前为止,我有:

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

有趣的部分是获取放入lParam的值。它必须是一个Int32(DWORD),表示鼠标的X和Y坐标。

有一个macro defined用于创建必要的结构,但它没有帮助我。所以,问题是:

在WPF窗口中,如何使用作为lParam参数传入的正确值正确触发此消息?

2 个答案:

答案 0 :(得分:2)

lParam = x | (y << 16);

其中x和y是坐标。

从消息中提取值:

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

答案 1 :(得分:1)

另一个答案将失败,鼠标坐标为负,您可能会在有多个显示器时看到。我认为这会奏效:

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

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