2012-03-17 35 views
1

我想使用的WndProc钩摆脱Win32 API的消息后,获取鼠标线..WndProc钩lParam到xy线?

下面是我的代码..它不长,应该很容易理解.. 我学习所有这一切,因为我去,只是无法弄清楚如何改变的lParam以点x和y ..

任何帮助将是很好,谢谢:)

private const int WM_LEFTBUTTONDOWN = 0x0201; 
    private const int WM_LEFTBUTTONUP = 0x0202; 
    private const int WM_MOUSEMOVE = 0x0200; 
    private const int WM_MOUSEWHEEL = 0x020A; 
    private const int WM_RIGHTBUTTONDOWN = 0x0204; 
    private const int WM_RIGHTBUTTONUP = 0x0205; 


    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnSourceInitialized(EventArgs e) 
    { 
     base.OnSourceInitialized(e); 
     HwndSource source = PresentationSource.FromVisual(this) as HwndSource; 
     source.AddHook(WndProc); 
    } 

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 

     if (msg == WM_MOUSEMOVE) 
     { 
      label1.Content = "Msg: " + msg + " wParam: " + wParam + " lParam: " + lParam; 
     } 

     return IntPtr.Zero; 
    } 

回答

2

的x坐标是在低16位,接下来的16位是y。破解这样的:

int x = (short)lParam.ToInt32(); 
int y = lParam.ToInt32() >> 16; 
+0

谢谢!,这个作品完美:) – 2012-03-17 09:31:53

4

可以使用Point(int dw)构造:

Point point = new Point(lParam.ToInt32()); 
... 

从MSDN约int dw参数:

低位的DW参数的16位指定水平x坐标和高16位指定新Point的垂直y坐标。