2012-03-17 34 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座標。