878 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			878 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    #region Enums
 | 
						|
    [System.Flags()]
 | 
						|
    internal enum eDockingHintSide
 | 
						|
    {
 | 
						|
        Left = 1,
 | 
						|
        Right = 2,
 | 
						|
        Top = 4,
 | 
						|
        Bottom = 8,
 | 
						|
        DockTab = 16,
 | 
						|
        All = (Left | Right | Top | Bottom | DockTab),
 | 
						|
        Sides = (Left | Right | Top | Bottom)
 | 
						|
    }
 | 
						|
 | 
						|
    internal enum eMouseOverHintSide
 | 
						|
    {
 | 
						|
        None,
 | 
						|
        Left,
 | 
						|
        Right,
 | 
						|
        Top,
 | 
						|
        Bottom,
 | 
						|
        DockTab,
 | 
						|
    }
 | 
						|
    #endregion
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Summary description for DockingHint.
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxItem(false)]
 | 
						|
    internal class DockingHint : System.Windows.Forms.Form
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
        /// <summary>
 | 
						|
        /// Required designer variable.
 | 
						|
        /// </summary>
 | 
						|
        private System.ComponentModel.Container components = null;
 | 
						|
        private eDockingHintSide m_DockingHintSide = eDockingHintSide.All;
 | 
						|
 | 
						|
        private eMouseOverHintSide m_MouseOverHintSide = eMouseOverHintSide.None;
 | 
						|
        private bool m_PendingRefresh = false;
 | 
						|
 | 
						|
        private GraphicsPath m_LeftHint = null;
 | 
						|
        private GraphicsPath m_RightHint = null;
 | 
						|
        private GraphicsPath m_BottomHint = null;
 | 
						|
        private GraphicsPath m_TopHint = null;
 | 
						|
        private GraphicsPath m_DockTabHint = null;
 | 
						|
        private bool m_MiddleDockHint = false;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Static Members
 | 
						|
        // Static Images
 | 
						|
        private static Bitmap s_ImageGuideTop = null;
 | 
						|
        private static Bitmap s_ImageGuideBottom = null;
 | 
						|
        private static Bitmap s_ImageGuideLeft = null;
 | 
						|
        private static Bitmap s_ImageGuideRight = null;
 | 
						|
        private static Bitmap s_ImageGuideTab = null;
 | 
						|
        private static Bitmap s_ImageGuideAllSides = null;
 | 
						|
 | 
						|
        private static Bitmap s_ImageGuideTop2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideBottom2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideLeft2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideRight2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideTab2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideTabTopBottom2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideTabLeftRight2010 = null;
 | 
						|
        private static Bitmap s_ImageGuideAllSides2010 = null;
 | 
						|
 | 
						|
        public static Bitmap ImageGuideTop
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTop == null)
 | 
						|
                    s_ImageGuideTop = BarFunctions.LoadBitmap("SystemImages.DockHintTop.png");
 | 
						|
                return s_ImageGuideTop;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideTop2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTop2010 == null)
 | 
						|
                    s_ImageGuideTop2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTop2010.png");
 | 
						|
                return s_ImageGuideTop2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static Bitmap ImageGuideBottom
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideBottom == null)
 | 
						|
                    s_ImageGuideBottom = BarFunctions.LoadBitmap("SystemImages.DockHintBottom.png");
 | 
						|
                return s_ImageGuideBottom;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideBottom2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideBottom2010 == null)
 | 
						|
                    s_ImageGuideBottom2010 = BarFunctions.LoadBitmap("SystemImages.DockHintBottom2010.png");
 | 
						|
                return s_ImageGuideBottom2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static Bitmap ImageGuideLeft
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideLeft == null)
 | 
						|
                    s_ImageGuideLeft = BarFunctions.LoadBitmap("SystemImages.DockHintLeft.png");// new Bitmap(typeof(DevComponents.DotNetBar.DotNetBarManager),"SystemImages.DockHintLeft.png");
 | 
						|
                return s_ImageGuideLeft;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideLeft2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideLeft2010 == null)
 | 
						|
                    s_ImageGuideLeft2010 = BarFunctions.LoadBitmap("SystemImages.DockHintLeft2010.png");// new Bitmap(typeof(DevComponents.DotNetBar.DotNetBarManager),"SystemImages.DockHintLeft.png");
 | 
						|
                return s_ImageGuideLeft2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static Bitmap ImageGuideRight
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideRight == null)
 | 
						|
                    s_ImageGuideRight = BarFunctions.LoadBitmap("SystemImages.DockHintRight.png");
 | 
						|
                return s_ImageGuideRight;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideRight2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideRight2010 == null)
 | 
						|
                    s_ImageGuideRight2010 = BarFunctions.LoadBitmap("SystemImages.DockHintRight2010.png");
 | 
						|
                return s_ImageGuideRight2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static Bitmap ImageGuideTab
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTab == null)
 | 
						|
                    s_ImageGuideTab = BarFunctions.LoadBitmap("SystemImages.DockHintTab.png");
 | 
						|
                return s_ImageGuideTab;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideTab2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTab2010 == null)
 | 
						|
                    s_ImageGuideTab2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTab2010.png");
 | 
						|
                return s_ImageGuideTab2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideAllTopBottom2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTabTopBottom2010 == null)
 | 
						|
                    s_ImageGuideTabTopBottom2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTopBottom2010.png");
 | 
						|
                return s_ImageGuideTabTopBottom2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideAllLeftRight2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideTabLeftRight2010 == null)
 | 
						|
                    s_ImageGuideTabLeftRight2010 = BarFunctions.LoadBitmap("SystemImages.DockHintLeftRight2010.png");
 | 
						|
                return s_ImageGuideTabLeftRight2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static Bitmap ImageGuideAllSides
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideAllSides == null)
 | 
						|
                    s_ImageGuideAllSides = BarFunctions.LoadBitmap("SystemImages.DockHintAllSides.png");
 | 
						|
                return s_ImageGuideAllSides;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        public static Bitmap ImageGuideAllSides2010
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (s_ImageGuideAllSides2010 == null)
 | 
						|
                    s_ImageGuideAllSides2010 = BarFunctions.LoadBitmap("SystemImages.DockHintAllSides2010.png");
 | 
						|
                return s_ImageGuideAllSides2010;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        private eDotNetBarStyle _Style = eDotNetBarStyle.Office2003;
 | 
						|
        public DockingHint(eDockingHintSide hintSide, eDotNetBarStyle style) : this(hintSide, false, style) { }
 | 
						|
        public DockingHint(eDockingHintSide hintSide, bool middleDockingHint, eDotNetBarStyle style)
 | 
						|
        {
 | 
						|
            //
 | 
						|
            // Required for Windows Form Designer support
 | 
						|
            //
 | 
						|
            InitializeComponent();
 | 
						|
            _Style = style;
 | 
						|
            m_MiddleDockHint = middleDockingHint;
 | 
						|
 | 
						|
            this.SetStyle(ControlStyles.Selectable, false);
 | 
						|
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 | 
						|
            this.SetStyle(DisplayHelp.DoubleBufferFlag, true);
 | 
						|
            this.SetStyle(ControlStyles.Opaque, true);
 | 
						|
 | 
						|
            m_DockingHintSide = hintSide;
 | 
						|
            UpdateControlRegion();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implemementation
 | 
						|
        public void ShowFocusless()
 | 
						|
        {
 | 
						|
            Size size = this.Size;
 | 
						|
            NativeFunctions.SetWindowPos(this.Handle, new IntPtr(NativeFunctions.HWND_TOP), 0, 0, size.Width, size.Height, NativeFunctions.SWP_SHOWWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE);
 | 
						|
            //this.TopMost=true;
 | 
						|
            if (!BarFunctions.ThemedOS)
 | 
						|
                UpdateControlRegion();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override CreateParams CreateParams
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                CreateParams cp = base.CreateParams;
 | 
						|
                cp.ExStyle |= (int)NativeFunctions.WS_EX_TOPMOST | (int)NativeFunctions.SWP_NOACTIVATE;
 | 
						|
                return cp;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Clean up any resources being used.
 | 
						|
        /// </summary>
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            if (disposing)
 | 
						|
            {
 | 
						|
                if (components != null)
 | 
						|
                {
 | 
						|
                    components.Dispose();
 | 
						|
                }
 | 
						|
            }
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        private void DisposeHintPaths()
 | 
						|
        {
 | 
						|
            DisposeHintPath(ref m_LeftHint);
 | 
						|
            DisposeHintPath(ref m_RightHint);
 | 
						|
            DisposeHintPath(ref m_TopHint);
 | 
						|
            DisposeHintPath(ref m_BottomHint);
 | 
						|
        }
 | 
						|
        private void DisposeHintPath(ref GraphicsPath path)
 | 
						|
        {
 | 
						|
            if (path != null) path.Dispose();
 | 
						|
            path = null;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Update control region based on hint side
 | 
						|
        /// </summary>
 | 
						|
        public void UpdateControlRegion()
 | 
						|
        {
 | 
						|
            System.Drawing.Region region = null;
 | 
						|
            System.Drawing.Size size = Size.Empty;
 | 
						|
            if (m_MiddleDockHint)
 | 
						|
            {
 | 
						|
                GraphicsPath path = new GraphicsPath();
 | 
						|
 | 
						|
                m_DockTabHint = this.GetHintPath(eDockingHintSide.DockTab);
 | 
						|
                DisposeHintPaths();
 | 
						|
                if (m_DockingHintSide == (eDockingHintSide.Left | eDockingHintSide.Right) && (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)))
 | 
						|
                {
 | 
						|
                    m_LeftHint = this.GetHintPath(eDockingHintSide.Left);
 | 
						|
                    m_RightHint = this.GetHintPath(eDockingHintSide.Right);
 | 
						|
                    path.AddRectangle(new Rectangle(0, 36, 112, 40));
 | 
						|
                }
 | 
						|
                else if (m_DockingHintSide == (eDockingHintSide.Top | eDockingHintSide.Bottom) && (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)))
 | 
						|
                {
 | 
						|
                    m_TopHint = this.GetHintPath(eDockingHintSide.Top);
 | 
						|
                    m_BottomHint = this.GetHintPath(eDockingHintSide.Bottom);
 | 
						|
                    path.AddRectangle(new Rectangle(36, 0, 40, 112));
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    // Assign paths
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Left) != 0)
 | 
						|
                    {
 | 
						|
                        m_LeftHint = this.GetHintPath(eDockingHintSide.Left);
 | 
						|
                        path.AddPath(m_LeftHint, true);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                            path.AddLine(26, 36, 26, 76);
 | 
						|
                        else
 | 
						|
                            path.AddLine(23, 57, 23, 29);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Top) != 0)
 | 
						|
                    {
 | 
						|
                        m_TopHint = this.GetHintPath(eDockingHintSide.Top);
 | 
						|
                        path.AddPath(m_TopHint, true);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                            path.AddLine(26, 36, 88, 36);
 | 
						|
                        else
 | 
						|
                            path.AddLine(29, 23, 57, 23);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Right) != 0)
 | 
						|
                    {
 | 
						|
                        m_RightHint = this.GetHintPath(eDockingHintSide.Right);
 | 
						|
                        path.AddPath(m_RightHint, true);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                            path.AddLine(88, 36, 88, 76);
 | 
						|
                        else
 | 
						|
                            path.AddLine(64, 29, 64, 57);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Bottom) != 0)
 | 
						|
                    {
 | 
						|
                        m_BottomHint = this.GetHintPath(eDockingHintSide.Bottom);
 | 
						|
                        path.AddPath(m_BottomHint, true);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                            path.AddLine(88, 76, 26, 76);
 | 
						|
                        else
 | 
						|
                            path.AddLine(57, 64, 29, 64);
 | 
						|
                    }
 | 
						|
                    path.CloseAllFigures();
 | 
						|
                }
 | 
						|
                if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    size = new Size(112, 112);
 | 
						|
                else
 | 
						|
                    size = new Size(88, 88);
 | 
						|
                region = new Region(path);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    size = new Size(40, 40);
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Left) != 0 || (m_DockingHintSide & eDockingHintSide.Right) != 0)
 | 
						|
                        size = new Size(31, 29);
 | 
						|
                    else
 | 
						|
                        size = new Size(29, 31);
 | 
						|
                }
 | 
						|
                if ((m_DockingHintSide & eDockingHintSide.Left) != 0)
 | 
						|
                {
 | 
						|
                    m_LeftHint = new GraphicsPath();
 | 
						|
                    m_LeftHint.AddRectangle(new Rectangle(Point.Empty, size));
 | 
						|
                }
 | 
						|
                if ((m_DockingHintSide & eDockingHintSide.Right) != 0)
 | 
						|
                {
 | 
						|
                    m_RightHint = new GraphicsPath();
 | 
						|
                    m_RightHint.AddRectangle(new Rectangle(Point.Empty, size));
 | 
						|
                }
 | 
						|
                if ((m_DockingHintSide & eDockingHintSide.Top) != 0)
 | 
						|
                {
 | 
						|
                    m_TopHint = new GraphicsPath();
 | 
						|
                    m_TopHint.AddRectangle(new Rectangle(Point.Empty, size));
 | 
						|
                }
 | 
						|
                if ((m_DockingHintSide & eDockingHintSide.Bottom) != 0)
 | 
						|
                {
 | 
						|
                    m_BottomHint = new GraphicsPath();
 | 
						|
                    m_BottomHint.AddRectangle(new Rectangle(Point.Empty, size));
 | 
						|
                }
 | 
						|
                region = new Region(new Rectangle(Point.Empty, size));
 | 
						|
            }
 | 
						|
 | 
						|
            this.Size = size;
 | 
						|
            if (region != null)
 | 
						|
                this.Region = region;
 | 
						|
        }
 | 
						|
 | 
						|
        private Rectangle GetHintRect()
 | 
						|
        {
 | 
						|
            System.Drawing.Size size = Size.Empty;
 | 
						|
 | 
						|
            if ((m_DockingHintSide & eDockingHintSide.Bottom) == eDockingHintSide.Bottom)
 | 
						|
            {
 | 
						|
                SizeF sf = m_BottomHint.GetBounds().Size;
 | 
						|
                size = new Size((int)sf.Width, (int)sf.Height);
 | 
						|
            }
 | 
						|
            if ((m_DockingHintSide & eDockingHintSide.Top) == eDockingHintSide.Top)
 | 
						|
            {
 | 
						|
                SizeF sf = m_TopHint.GetBounds().Size;
 | 
						|
                size = new Size((int)sf.Width, (int)sf.Height);
 | 
						|
            }
 | 
						|
            if ((m_DockingHintSide & eDockingHintSide.Right) == eDockingHintSide.Right)
 | 
						|
            {
 | 
						|
                SizeF sf = m_RightHint.GetBounds().Size;
 | 
						|
                size = new Size((int)sf.Width, (int)sf.Height);
 | 
						|
            }
 | 
						|
            if ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab)
 | 
						|
            {
 | 
						|
                SizeF sf = m_DockTabHint.GetBounds().Size;
 | 
						|
                size = new Size((int)sf.Width, (int)sf.Height);
 | 
						|
            }
 | 
						|
            if ((m_DockingHintSide & eDockingHintSide.Left) == eDockingHintSide.Left)
 | 
						|
            {
 | 
						|
                SizeF sf = m_LeftHint.GetBounds().Size;
 | 
						|
                size = new Size((int)sf.Width, (int)sf.Height);
 | 
						|
            }
 | 
						|
            if (m_DockingHintSide == eDockingHintSide.Sides)
 | 
						|
                size = new Size(88, 88);
 | 
						|
 | 
						|
            return new Rectangle(Point.Empty, size);
 | 
						|
        }
 | 
						|
 | 
						|
        private Image GetImageGuideTab()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
            {
 | 
						|
                return DockingHint.ImageGuideTab2010;
 | 
						|
            }
 | 
						|
            return DockingHint.ImageGuideTab;
 | 
						|
        }
 | 
						|
 | 
						|
        private Image GetImageGuideAllSides()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
            {
 | 
						|
                if (m_DockingHintSide == (eDockingHintSide.Left | eDockingHintSide.Right))
 | 
						|
                    return DockingHint.ImageGuideAllLeftRight2010;
 | 
						|
                else if (m_DockingHintSide == (eDockingHintSide.Top | eDockingHintSide.Bottom))
 | 
						|
                    return DockingHint.ImageGuideAllTopBottom2010;
 | 
						|
                return DockingHint.ImageGuideAllSides2010;
 | 
						|
            }
 | 
						|
            return DockingHint.ImageGuideAllSides;
 | 
						|
        }
 | 
						|
 | 
						|
        private Image GetImageGuideLeft()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                return DockingHint.ImageGuideLeft2010;
 | 
						|
            return DockingHint.ImageGuideLeft;
 | 
						|
        }
 | 
						|
        private Image GetImageGuideRight()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                return DockingHint.ImageGuideRight2010;
 | 
						|
            return DockingHint.ImageGuideRight;
 | 
						|
        }
 | 
						|
        private Image GetImageGuideTop()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                return DockingHint.ImageGuideTop2010;
 | 
						|
            return DockingHint.ImageGuideTop;
 | 
						|
        }
 | 
						|
        private Image GetImageGuideBottom()
 | 
						|
        {
 | 
						|
            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                return DockingHint.ImageGuideBottom2010;
 | 
						|
            return DockingHint.ImageGuideBottom;
 | 
						|
        }
 | 
						|
 | 
						|
        private SolidBrush CreateOverlayMouseOverBrush()
 | 
						|
        {
 | 
						|
            return new SolidBrush(Color.FromArgb(48, Color.Navy));
 | 
						|
        }
 | 
						|
        protected override void OnPaint(PaintEventArgs e)
 | 
						|
        {
 | 
						|
            Graphics g = e.Graphics;
 | 
						|
            Color colorHot = Color.FromArgb(65, 112, 202);
 | 
						|
            Color color = Color.FromArgb(228, 228, 228);
 | 
						|
 | 
						|
            SolidBrush brush = new SolidBrush(color);
 | 
						|
            Pen pen = new Pen(colorHot, 1);
 | 
						|
 | 
						|
            try
 | 
						|
            {
 | 
						|
                if (m_MiddleDockHint)
 | 
						|
                {
 | 
						|
                    g.DrawImageUnscaled(GetImageGuideAllSides(), 0, 0);
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab)
 | 
						|
                    {
 | 
						|
                        Image imageGuideTab = GetImageGuideTab();
 | 
						|
                        if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                            g.DrawImageUnscaled(imageGuideTab, (this.Width - imageGuideTab.Width) / 2, (this.Height - imageGuideTab.Height) / 2);
 | 
						|
                        else
 | 
						|
                            g.DrawImageUnscaled(imageGuideTab, (this.Width - imageGuideTab.Width) / 2 + 2, (this.Height - imageGuideTab.Height) / 2 + 2);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    {
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if ((m_DockingHintSide & eDockingHintSide.Bottom) != eDockingHintSide.Bottom)
 | 
						|
                            g.FillRectangle(brush, 33, 60, 23, 26);
 | 
						|
                        if ((m_DockingHintSide & eDockingHintSide.Top) != eDockingHintSide.Top)
 | 
						|
                            g.FillRectangle(brush, 33, 4, 23, 26);
 | 
						|
                        if ((m_DockingHintSide & eDockingHintSide.Left) != eDockingHintSide.Left)
 | 
						|
                            g.FillRectangle(brush, 4, 33, 26, 23);
 | 
						|
                        if ((m_DockingHintSide & eDockingHintSide.Right) != eDockingHintSide.Right)
 | 
						|
                            g.FillRectangle(brush, 60, 33, 26, 23);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Left) == eDockingHintSide.Left)
 | 
						|
                    {
 | 
						|
                        g.DrawImage(GetImageGuideLeft(), m_LeftHint.GetBounds());
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Right) == eDockingHintSide.Right)
 | 
						|
                    {
 | 
						|
                        g.DrawImage(GetImageGuideRight(), m_RightHint.GetBounds());
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Top) == eDockingHintSide.Top)
 | 
						|
                    {
 | 
						|
                        g.DrawImage(GetImageGuideTop(), m_TopHint.GetBounds());
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_DockingHintSide & eDockingHintSide.Bottom) == eDockingHintSide.Bottom)
 | 
						|
                    {
 | 
						|
                        g.DrawImage(GetImageGuideBottom(), m_BottomHint.GetBounds());
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        g.FillRectangle(brush, 33, 84, 23, 26);
 | 
						|
                }
 | 
						|
 | 
						|
                if (m_MouseOverHintSide == eMouseOverHintSide.Left)
 | 
						|
                {
 | 
						|
                    if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)) 
 | 
						|
                    {
 | 
						|
                        Rectangle hintRect;
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                            hintRect = new Rectangle(4, 40, 32, 32);
 | 
						|
                        else
 | 
						|
                            hintRect = new Rectangle(4, 4, 32, 32);
 | 
						|
                        using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
 | 
						|
                        {
 | 
						|
                            using(SolidBrush brush2=CreateOverlayMouseOverBrush())
 | 
						|
                                g.FillPath(brush2, mp);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        RectangleF r = m_LeftHint.GetBounds();
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                        {
 | 
						|
                            r.Inflate(0, -6);
 | 
						|
                            r.Width -= 6;
 | 
						|
                        }
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
 | 
						|
                        g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (m_MouseOverHintSide == eMouseOverHintSide.Right)
 | 
						|
                {
 | 
						|
                    if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    {
 | 
						|
                        Rectangle hintRect;
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                            hintRect = new Rectangle(76, 40, 32, 32);
 | 
						|
                        else
 | 
						|
                            hintRect = new Rectangle(4, 4, 32, 32);
 | 
						|
                        using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
 | 
						|
                        {
 | 
						|
                            using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
 | 
						|
                                g.FillPath(brush2, mp);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        RectangleF r = m_RightHint.GetBounds();
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                        {
 | 
						|
                            r.Inflate(0, -6);
 | 
						|
                            r.Width -= 6;
 | 
						|
                            r.X += 6;
 | 
						|
                        }
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
 | 
						|
                        g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
 | 
						|
                        g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (m_MouseOverHintSide == eMouseOverHintSide.Top)
 | 
						|
                {
 | 
						|
                    if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    {
 | 
						|
                        Rectangle hintRect;
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                            hintRect = new Rectangle(40, 4, 32, 32);
 | 
						|
                        else
 | 
						|
                            hintRect = new Rectangle(4, 4, 32, 32);
 | 
						|
                        using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
 | 
						|
                        {
 | 
						|
                            using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
 | 
						|
                                g.FillPath(brush2, mp);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        RectangleF r = m_TopHint.GetBounds();
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                        {
 | 
						|
                            r.Inflate(-6, 0);
 | 
						|
                            r.Height -= 6;
 | 
						|
                        }
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
 | 
						|
                        g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (m_MouseOverHintSide == eMouseOverHintSide.Bottom)
 | 
						|
                {
 | 
						|
                    if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    {
 | 
						|
                        Rectangle hintRect;
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                            hintRect = new Rectangle(40, 76, 32, 32);
 | 
						|
                        else
 | 
						|
                            hintRect = new Rectangle(4, 4, 32, 32);
 | 
						|
                        using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
 | 
						|
                        {
 | 
						|
                            using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
 | 
						|
                                g.FillPath(brush2, mp);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        RectangleF r = m_BottomHint.GetBounds();
 | 
						|
                        if (m_MiddleDockHint)
 | 
						|
                        {
 | 
						|
                            r.Inflate(-6, 0);
 | 
						|
                            r.Height -= 6;
 | 
						|
                            r.Y += 6;
 | 
						|
                        }
 | 
						|
                        g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
 | 
						|
                        g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
 | 
						|
                        g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (m_MouseOverHintSide == eMouseOverHintSide.DockTab)
 | 
						|
                {
 | 
						|
                    if ((_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)) && m_MiddleDockHint)
 | 
						|
                    {
 | 
						|
                        Rectangle hintRect = new Rectangle(40, 40, 32, 32);
 | 
						|
                        using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
 | 
						|
                        {
 | 
						|
                            using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
 | 
						|
                                g.FillPath(brush2, mp);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                brush.Dispose();
 | 
						|
                pen.Dispose();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public GraphicsPath GetHintPath(eDockingHintSide hintSide)
 | 
						|
        {
 | 
						|
            // Create top hint path then rotate depending on desired side
 | 
						|
            GraphicsPath path = new GraphicsPath();
 | 
						|
            if (hintSide == eDockingHintSide.DockTab)
 | 
						|
            {
 | 
						|
                if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                    path.AddRectangle(new Rectangle(40, 40, 32, 32));
 | 
						|
                else
 | 
						|
                    path.AddRectangle(new Rectangle(29, 29, 29, 29));
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                path.StartFigure();
 | 
						|
                if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                {
 | 
						|
                    //path.AddLine(26, 36, 36, 26);
 | 
						|
                    //path.AddLine(36, 0, 76, 0);
 | 
						|
                    //path.AddLine(76, 26, 86, 36);
 | 
						|
                    path.AddLine(27, 35, 36, 26);
 | 
						|
                    path.AddLine(36, 0, 76, 0);
 | 
						|
                    path.AddLine(76, 26, 86, 35);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    path.AddLine(23, 28, 28, 23);
 | 
						|
                    path.AddLine(29, 23, 29, 0);
 | 
						|
                    path.AddLine(57, 0, 57, 23);
 | 
						|
                    path.AddLine(58, 23, 63, 28);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            switch (hintSide)
 | 
						|
            {
 | 
						|
                case eDockingHintSide.Bottom:
 | 
						|
                    {
 | 
						|
                        using (Matrix matrix = new Matrix())
 | 
						|
                        {
 | 
						|
                            matrix.Rotate(180);
 | 
						|
                            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                                matrix.Translate(-path.GetBounds().Width * 2 + 6, -path.GetBounds().Height * 2 - 42);
 | 
						|
                            else
 | 
						|
                                matrix.Translate(-path.GetBounds().Width * 2 - 6, -path.GetBounds().Height * 2 - 30);
 | 
						|
                            path.Transform(matrix);
 | 
						|
                        }
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                case eDockingHintSide.Left:
 | 
						|
                    {
 | 
						|
                        using (Matrix matrix = new Matrix())
 | 
						|
                        {
 | 
						|
                            matrix.Rotate(-90);
 | 
						|
                            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                                matrix.Translate(-53, 0);
 | 
						|
                            else
 | 
						|
                                matrix.Translate(-46, 0);
 | 
						|
                            path.Transform(matrix);
 | 
						|
                            matrix.Reset();
 | 
						|
                            matrix.Translate(0, path.GetBounds().Height);
 | 
						|
                            path.Transform(matrix);
 | 
						|
                        }
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                case eDockingHintSide.Right:
 | 
						|
                    {
 | 
						|
                        using (Matrix matrix = new Matrix())
 | 
						|
                        {
 | 
						|
                            matrix.Rotate(90);
 | 
						|
                            path.Transform(matrix);
 | 
						|
                            matrix.Reset();
 | 
						|
                            if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
 | 
						|
                                matrix.Translate(path.GetBounds().Width * 2 + 42, 0);
 | 
						|
                            else
 | 
						|
                                matrix.Translate(path.GetBounds().Width * 2 + 30, 0);
 | 
						|
                            path.Transform(matrix);
 | 
						|
                        }
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
            }
 | 
						|
 | 
						|
            return path;
 | 
						|
        }
 | 
						|
 | 
						|
        internal eMouseOverHintSide ExMouseMove(int x, int y)
 | 
						|
        {
 | 
						|
            if (this.Bounds.Contains(x, y))
 | 
						|
            {
 | 
						|
                Point p = this.PointToClient(new Point(x, y));
 | 
						|
                if (m_LeftHint != null && m_LeftHint.IsVisible(p))
 | 
						|
                {
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.Left;
 | 
						|
                }
 | 
						|
                else if (m_RightHint != null && m_RightHint.IsVisible(p))
 | 
						|
                {
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.Right;
 | 
						|
                }
 | 
						|
                else if (m_TopHint != null && m_TopHint.IsVisible(p))
 | 
						|
                {
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.Top;
 | 
						|
                }
 | 
						|
                else if (m_BottomHint != null && m_BottomHint.IsVisible(p))
 | 
						|
                {
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.Bottom;
 | 
						|
                }
 | 
						|
                else if (m_DockTabHint != null && m_DockTabHint.IsVisible(p) && ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab))
 | 
						|
                {
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.DockTab;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    this.MouseOverHintSide = eMouseOverHintSide.None;
 | 
						|
            }
 | 
						|
            else
 | 
						|
                this.MouseOverHintSide = eMouseOverHintSide.None;
 | 
						|
            this.ProcessPendingRefresh();
 | 
						|
 | 
						|
            return this.MouseOverHintSide;
 | 
						|
        }
 | 
						|
 | 
						|
        private eMouseOverHintSide MouseOverHintSide
 | 
						|
        {
 | 
						|
            get { return m_MouseOverHintSide; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_MouseOverHintSide != value)
 | 
						|
                {
 | 
						|
                    m_MouseOverHintSide = value;
 | 
						|
                    m_PendingRefresh = true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void ProcessPendingRefresh()
 | 
						|
        {
 | 
						|
            if (m_PendingRefresh)
 | 
						|
            {
 | 
						|
                m_PendingRefresh = false;
 | 
						|
                this.Refresh();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public eDockingHintSide DockingHintSides
 | 
						|
        {
 | 
						|
            get { return m_DockingHintSide; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_DockingHintSide != value)
 | 
						|
                {
 | 
						|
                    m_DockingHintSide = value;
 | 
						|
                    UpdateControlRegion();
 | 
						|
                    if (this.IsHandleCreated)
 | 
						|
                        this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool MiddleDockHint
 | 
						|
        {
 | 
						|
            get { return m_MiddleDockHint; }
 | 
						|
            set { m_MiddleDockHint = value; }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Windows Form Designer generated code
 | 
						|
        /// <summary>
 | 
						|
        /// Required method for Designer support - do not modify
 | 
						|
        /// the contents of this method with the code editor.
 | 
						|
        /// </summary>
 | 
						|
        private void InitializeComponent()
 | 
						|
        {
 | 
						|
            // 
 | 
						|
            // DockingHint
 | 
						|
            // 
 | 
						|
            //			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 | 
						|
            //			this.ClientSize = new System.Drawing.Size(24, 24);
 | 
						|
            this.ControlBox = false;
 | 
						|
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
 | 
						|
            this.MinimizeBox = false;
 | 
						|
            this.MaximizeBox = false;
 | 
						|
            this.ControlBox = false;
 | 
						|
            this.Name = "DockingHint";
 | 
						|
            this.Text = "";
 | 
						|
            this.ShowInTaskbar = false;
 | 
						|
            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
 | 
						|
            this.StartPosition = FormStartPosition.Manual;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |