0

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

到目前为止,我有:

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

有趣的部分是将值放入 lParam。它需要是一个表示鼠标 X 和 Y 坐标的 Int32 (DWORD)。

定义了一个来创建必要的结构,但它对我没有帮助。所以,问题是这样的:

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

4

2 回答 2

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

其中 x 和 y 是坐标。

要从消息中提取值:

int x = lParam & 0xFFFF;
int y = (lParam >> 16) & 0xFFFF;
于 2013-02-27T12:20:22.867 回答
2

另一个答案将因鼠标坐标为负而失败,当您有多个显示器时可能会看到。我认为这会起作用:

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

x = (short)lParam;
y = (short)(lParam >> 16);
于 2013-02-27T17:05:30.937 回答