【问题标题】:How to get Screen mouse coordinates into POINTS structure如何将屏幕鼠标坐标转换为 POINTS 结构
【发布时间】:2013-02-27 11:43:18
【问题描述】:

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

到目前为止,我有:

[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 参数传入的正确值正确触发此消息?

【问题讨论】:

    标签: c# wpf winapi


    【解决方案1】:
    lParam = x | (y << 16);
    

    其中 x 和 y 是坐标。

    从消息中提取值:

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

    【讨论】:

    • 这会因鼠标坐标为负而失败。
    【解决方案2】:

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

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

    【讨论】:

    • 如果有其他人试图弄清楚为什么这在 Java 中不起作用,Java 会使用整数进行按位运算。因此,即使您将其转换为短,它也不适用于负 x 值
    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多