我不得不为自定义绘制的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参数传入的正确值正确触发此消息?
答案 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);