using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace WeifenLuo.WinFormsUI.Docking { internal class SplitterBase : Control { public SplitterBase() { SetStyle(ControlStyles.Selectable, false); } public override DockStyle Dock { get { return base.Dock; } set { SuspendLayout(); base.Dock = value; if (Dock == DockStyle.Left || Dock == DockStyle.Right) Width = SplitterSize; else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) Height = SplitterSize; else Bounds = Rectangle.Empty; if (Dock == DockStyle.Left || Dock == DockStyle.Right) Cursor = Cursors.VSplit; else if (Dock == DockStyle.Top || Dock == DockStyle.Bottom) Cursor = Cursors.HSplit; else Cursor = Cursors.Default; ResumeLayout(); } } protected virtual int SplitterSize { get { return 0; } } protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (e.Button != MouseButtons.Left) return; StartDrag(); } protected virtual void StartDrag() { } protected override void WndProc(ref Message m) { // eat the WM_MOUSEACTIVATE message if (m.Msg == (int)Win32.Msgs.WM_MOUSEACTIVATE) return; base.WndProc(ref m); } } }