/// <summary>
        /// Process a change in mouse position.
        /// </summary>
        /// <param name="e">Mouse event information that triggered call.</param>
        public override void OnMouseMove(MouseEventArgs e)
        {
            if (CallingControl.Handle != IntPtr.Zero)
            {
                // Convert from Control coordinates to screen coordinates
                Point mousePos = CallingControl.PointToScreen(new Point(e.X, e.Y));

                // Find HotZone this position is inside
                HotZone hz = FindHotZone(mousePos);

                if (hz != _currentHotZone)
                {
                    if (_currentHotZone != null)
                    {
                        _currentHotZone.RemoveIndicator(DragFeedback, mousePos);
                    }

                    _currentHotZone = hz;

                    if (_currentHotZone != null)
                    {
                        _currentHotZone.DrawIndicator(DragFeedback, mousePos);
                    }
                }
                else
                {
                    if (_currentHotZone != null)
                    {
                        _currentHotZone.UpdateForMousePosition(DragFeedback, mousePos, this);
                    }
                }
            }

            base.OnMouseMove(e);
        }
        /// <summary>
        /// Exit hot tracking mode.
        /// </summary>
        /// <param name="e">Mouse event information that triggered call.</param>
        /// <returns></returns>
        public override bool ExitTrackingMode(MouseEventArgs e)
        {
            // Have we exiting tracking mode?
            if (Tracking)
            {
                base.ExitTrackingMode(e);

                // Remove feedback from display
                DragFeedback.Quit();

                // Ensure any additional indicators are removed
                CleanupHotAreas();

                // Is there a current HotZone active?
                if (_currentHotZone != null)
                {
                    // Convert from Control coordinates to screen coordinates
                    Point mousePos = CallingControl.PointToScreen(new Point(e.X, e.Y));

                    // Let the zone apply whatever change it represents
                    bool ret = _currentHotZone.ApplyChange(mousePos, this);

                    // If a change occured, need to recalculate sizing
                    if (ret)
                    {
                        DockingManager.CheckResized();
                    }

                    return(ret);
                }
            }

            return(false);
        }
        /// <summary>
        /// Process a mouse button up call.
        /// </summary>
        /// <param name="e">Mouse event information that triggered call.</param>
        /// <returns>true if redocking action occured;false otherwise.</returns>
        public override bool OnMouseUp(MouseEventArgs e)
        {
            if (CallingControl.Handle != IntPtr.Zero)
            {
                if (_currentHotZone != null)
                {
                    _currentHotZone.RemoveIndicator(DragFeedback, CallingControl.PointToScreen(new Point(e.X, e.Y)));
                }
            }

            return(base.OnMouseUp(e));
        }