示例#1
0
 private void AllowUserToMoveWindowByDragging()
 {
     //Lots of low level windows BS
     MouseHook.HookWindow((WM code) =>
     {
         if (code == WM.MOUSEMOVE || code == WM.NCMOUSEMOVE)
         {
             if (_bMouseDown)
             {
                 System.Drawing.Point curMouse = MouseHook.GetMousePosition();
                 if (_vLastMouse != null)
                 {
                     System.Drawing.Point delta = new System.Drawing.Point(
                         _vLastMouse.Value.X - curMouse.X,
                         _vLastMouse.Value.Y - curMouse.Y);
                     Top  -= delta.Y;
                     Left -= delta.X;
                 }
                 _vLastMouse = new System.Drawing.Point(curMouse.X, curMouse.Y);
             }
         }
     });
 }
示例#2
0
        public static void HookWindow(Action <WM> callback)
        {
            _callback = callback;

            _hookProc = (int code, IntPtr wParam, IntPtr lParam) =>
            {
                if (code < 0)
                {
                    //you need to call CallNextHookEx without further processing
                    //and return the value returned by CallNextHookEx
                    return(MouseHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam));
                }
                WM message = (WM)wParam.ToInt32();
                _callback(message);
                return(MouseHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam));;
            };

            //Hooks the mouse into the application window.
            SetWindowsHookEx(
                HookType.WH_MOUSE,
                _hookProc,
                IntPtr.Zero,
                GetCurrentThreadId());
        }
示例#3
0
 private void _MoveWindow_MouseDown(object sender, MouseButtonEventArgs e)
 {
     System.Drawing.Point curMouse = MouseHook.GetMousePosition();
     _vLastMouse = new System.Drawing.Point(curMouse.X, curMouse.Y);
     _bMouseDown = true;
 }