private bool IsTabItemsContaining(Form f, out MdiGMTabItem theTab)
 {
     theTab = null;
     foreach (MdiGMTabItem tab in _listTabItems)
     {
         if (f == tab.form)
         {
             theTab = tab;
             return true;
         }
     }
     return false;
 }
        private void RenderTabItem(Graphics g, MdiGMTabItem tab)
        {
            Rectangle rect = tab.Bounds;
            Region oldRegion = g.Clip;
            Region newRegion = new Region(rect);
            g.Clip = newRegion;

            // fill backgroung
            Color backTop, backBottom;
            if (tab.IsFormActive)
            {
                backTop = TabActiveBackColorTop;
                backBottom = TabActiveBackColorBottom;
            }
            else
            {
                backTop = TabDeactiveBackColorTop;
                backBottom = TabDeactiveBackColorBottom;
            }

            // background
            using (LinearGradientBrush lb = new LinearGradientBrush(
                rect, backTop, backBottom, LinearGradientMode.Vertical))
            {
                using (GraphicsPath path = PathGetter.GetTabBorderPath(rect, TabSlopeWidth))
                {
                    g.FillPath(lb, path);
                }
            }

            // icon
            if (ShowTabIcon && tab.form.Icon != null)
            {
                if (tab.IconRect.Right < tab.Bounds.Right)
                    g.DrawIcon(tab.form.Icon, tab.IconRect);
            }

            // text
            TextRenderer.DrawText(g, tab.form.Text, tab.form.Font, tab.TextRect, tab.form.ForeColor,
                TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis);

            // outter border
            rect.Width--;
            rect.Height--;
            using (Pen p = new Pen(TabOutterBorderColor))
            {
                if (tab.IsFormActive)
                {
                    Rectangle rectTab = tab.Bounds;
                    Rectangle rectBottom = BarBottomRegionBounds;
                    Point p1 = new Point(rectBottom.X, rectBottom.Y - 1);
                    Point p2 = new Point(rectTab.X, rectTab.Bottom - 1);
                    Point p3 = new Point(rectTab.X + TabSlopeWidth, rectTab.Y);
                    Point p4 = new Point(rectTab.Right - 1 - TabSlopeWidth, rectTab.Y);
                    Point p5 = new Point(rectTab.Right - 1, rectTab.Bottom - 1);
                    Point p6 = new Point(rectBottom.Right - 1, rectBottom.Y - 1);
                    g.Clip = oldRegion;
                    g.DrawLines(p, new Point[] { p1, p2, p3, p4, p5, p6 });
                    g.Clip = newRegion;
                }
                else
                {
                    using (GraphicsPath path = PathGetter.GetTabBorderPath(rect, TabSlopeWidth))
                    {
                        g.DrawPath(p, path);
                    }
                }
            }

            // inner border
            rect.Inflate(-1, -1);
            rect.Height++;  // 为了使bar-bottom-region 与 active-tab 的连线能覆盖非 active-tab 的底部的线
            using (Pen p = new Pen(TabInnerBorderColor))
            {
                using (GraphicsPath path = PathGetter.GetTabBorderPath(rect, TabSlopeWidth))
                {
                    g.DrawPath(p, path);
                }
            }

            // do not let the active-tab to have bottom-line
            if (tab.IsFormActive)
            {
                Rectangle rtmp = tab.Bounds;
                Point p1 = new Point(rtmp.Left + 1, rtmp.Bottom - 1);
                Point p2 = new Point(rtmp.Right - 2, rtmp.Bottom - 1);
                using (Pen pen = new Pen(backBottom))
                {
                    g.DrawLine(pen, p1, p2);
                }
            }

            //close btn
            tab.CloseBtn.Bounds = tab.CloseBtnRect;
            tab.CloseBtn.PaintControl(g);

            g.Clip = oldRegion;
            newRegion.Dispose();
        }
        private MdiGMTabItem CreateNewTab(Form f)
        {
            MdiGMTabItem tab = new MdiGMTabItem(this);
            tab.form = f;
            tab.CloseBtn = new WLButton(_owner);
            tab.CloseBtn.XTheme.ColorTable = TabCloseBtnColor;
            tab.CloseBtn.BorderType = ButtonBorderType.Ellipse;
            tab.CloseBtn.DrawForePathTwice = true;
            //tab.CloseBtn.DrawLightGlass = true;
            tab.CloseBtn.ClickSendBackOject = f;
            tab.CloseBtn.ForePathGetter = new
                ButtonForePathGetter(GraphicsPathHelper.CreateSingleLineCloseFlag);
            tab.CloseBtn.Click += new EventHandler(OnTabCloseBtnClick);

            // menu item
            tab.MenuItemPop = new ToolStripMenuItem();
            tab.MenuItemPop.Tag = f;
            tab.MenuItemPop.Click += new EventHandler(OnPopMenuItemClick);
            _menuPopup.Items.Add(tab.MenuItemPop);
            return tab;
        }