protected override void Dispose(bool disposing) { if(disposing) { if(_hook != null) { _hook.Dispose(); _hook = null; } _timer.Dispose(); } base.Dispose(disposing); }
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)); }; } }