Esempio n. 1
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));
                };
            }
        }