Example #1
0
 protected override void Dispose(bool disposing)
 {
     if(disposing)
     {
         if(_hook != null)
         {
             _hook.Dispose();
             _hook = null;
         }
         _timer.Dispose();
     }
     base.Dispose(disposing);
 }
Example #2
0
        public void ShowDragVisual(Control control)
        {
            UpdatePosition();
            User32.ShowWindow(this.Handle, 8);
            User32.SetWindowPos(
                this.Handle, (IntPtr)(-1),
                0, 0, 0, 0,
                0x0010 | 0x0002 | 0x001);

            try
            {
                _hook = new LowLevelMouseHook();
                _hook.Activate(0);
            }
            catch(Win32Exception)
            {
                if(_hook != null)
                {
                    _hook.Dispose();
                    _hook = null;
                }
            }

            if(_hook == null)
            {
                _timer.Enabled = true;
                if(control != null)
                {
                    control.GiveFeedback += OnControlGiveFeedback;
                }
            }
            else
            {
                _hook.MouseMove += (s, e) =>
                    {
                        if(InvokeRequired)
                        {
                            BeginInvoke(new Action<Point>(UpdatePosition), e.Location);
                        }
                        else
                        {
                            UpdatePosition(e.Location);
                        }
                    };
                _hook.MouseWheel += (s, e) =>
                    {
                        if(e.Delta == 0)
                        {
                            return;
                        }
                        var h = User32.WindowFromPoint(new POINT(e.X, e.Y));
                        if(h == IntPtr.Zero)
                        {
                            return;
                        }
                        User32.SendMessage(h, WM.MOUSEWHEEL, (IntPtr)(e.Delta << 16), (IntPtr)((e.Y << 16) | e.X));
                    };
            }
        }