public ToolBarManager(ScrollableControl dockStation, Form mainForm)
 {
     this.DockStation = dockStation;
     this.MainForm = mainForm;
     _left = new ToolBarDockArea(this, DockStyle.Left);
     _right = new ToolBarDockArea(this, DockStyle.Right);
     _top = new ToolBarDockArea(this, DockStyle.Top);
     _bottom = new ToolBarDockArea(this, DockStyle.Bottom);
     Application.AddMessageFilter(this);
 }
        public ToolBarDockHolder(ToolBarManager dm, Control c, DockStyle style)
        {
            InitializeComponent();
            this.SetStyle(
                ControlStyles.AllPaintingInWmPaint |
                ControlStyles.UserPaint |
                ControlStyles.DoubleBuffer, true);

            _panel.Controls.AddRange(new Control[]{c});
            DockManager = dm;
            if(style == DockStyle.Left)
            {
                _preferredDockedArea = dm.Left;
            }
            else if(style == DockStyle.Right)
            {
                _preferredDockedArea = dm.Right;
            }
            else if(style == DockStyle.Bottom)
            {
                _preferredDockedArea = dm.Bottom;
            }
            else
            {
                _preferredDockedArea = dm.Top;
            }
            _control = c;
            FloatForm.Visible = false;
            FloatForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            FloatForm.MaximizeBox = false;
            FloatForm.MinimizeBox = false;
            FloatForm.ShowInTaskbar = false;
            FloatForm.ClientSize = new Size(10,10);
            // Added by mav
            DockManager.MainForm.AddOwnedForm(FloatForm);
            DockStyle = style;
            ToolbarTitle = c.Text;
            //			_control.TextChanged += new EventHandler(control_TextChanged);
        }
        protected ToolBarDockArea GetClosestArea(Point ptScreen, ToolBarDockArea preferred)
        {
            if(preferred != null)
            {
                Rectangle p = preferred.RectangleToScreen(preferred.ClientRectangle);
                p.Inflate(8,8);
                if(p.Contains(ptScreen)) return preferred;
            }

            Rectangle l = _left.RectangleToScreen(_left.ClientRectangle);
            l.Inflate(8,8);
            Rectangle r = _right.RectangleToScreen(_right.ClientRectangle);
            r.Inflate(8,8);
            Rectangle t = _top.RectangleToScreen(_top.ClientRectangle);
            t.Inflate(8,8);
            Rectangle b = _bottom.RectangleToScreen(_bottom.ClientRectangle);
            b.Inflate(8,8);

            if(t.Contains(ptScreen)) return _top;
            if(b.Contains(ptScreen)) return _bottom;
            if(l.Contains(ptScreen)) return _left;
            if(r.Contains(ptScreen)) return _right;

            return null;
        }