91 lines
3.5 KiB
C#
91 lines
3.5 KiB
C#
|
|
using System.ComponentModel;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using WeifenLuo.WinFormsUI.Docking;
|
|||
|
|
using static WeifenLuo.WinFormsUI.Docking.DockPanel;
|
|||
|
|
using static WeifenLuo.WinFormsUI.Docking.DockPanelExtender;
|
|||
|
|
|
|||
|
|
namespace WeifenLuo.WinFormsUI.ThemeVS2005
|
|||
|
|
{
|
|||
|
|
public class VS2005AutoHideWindowFactory : IAutoHideWindowFactory
|
|||
|
|
{
|
|||
|
|
public DockPanel.AutoHideWindowControl CreateAutoHideWindow(DockPanel panel)
|
|||
|
|
{
|
|||
|
|
return new VS2005AutoHideWindowControl(panel);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[ToolboxItem(false)]
|
|||
|
|
private class VS2005AutoHideWindowControl : AutoHideWindowControl
|
|||
|
|
{
|
|||
|
|
public VS2005AutoHideWindowControl(DockPanel dockPanel) : base(dockPanel)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnLayout(LayoutEventArgs levent)
|
|||
|
|
{
|
|||
|
|
DockPadding.All = 0;
|
|||
|
|
if (DockState == DockState.DockLeftAutoHide)
|
|||
|
|
{
|
|||
|
|
DockPadding.Right = 2;
|
|||
|
|
m_splitter.Dock = DockStyle.Right;
|
|||
|
|
}
|
|||
|
|
else if (DockState == DockState.DockRightAutoHide)
|
|||
|
|
{
|
|||
|
|
DockPadding.Left = 2;
|
|||
|
|
m_splitter.Dock = DockStyle.Left;
|
|||
|
|
}
|
|||
|
|
else if (DockState == DockState.DockTopAutoHide)
|
|||
|
|
{
|
|||
|
|
DockPadding.Bottom = 2;
|
|||
|
|
m_splitter.Dock = DockStyle.Bottom;
|
|||
|
|
}
|
|||
|
|
else if (DockState == DockState.DockBottomAutoHide)
|
|||
|
|
{
|
|||
|
|
DockPadding.Top = 2;
|
|||
|
|
m_splitter.Dock = DockStyle.Top;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Rectangle rectDisplaying = DisplayingRectangle;
|
|||
|
|
Rectangle rectHidden = new Rectangle(-rectDisplaying.Width, rectDisplaying.Y, rectDisplaying.Width, rectDisplaying.Height);
|
|||
|
|
foreach (Control c in Controls)
|
|||
|
|
{
|
|||
|
|
DockPane pane = c as DockPane;
|
|||
|
|
if (pane == null)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (pane == ActivePane)
|
|||
|
|
pane.Bounds = rectDisplaying;
|
|||
|
|
else
|
|||
|
|
pane.Bounds = rectHidden;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
base.OnLayout(levent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnPaint(PaintEventArgs e)
|
|||
|
|
{
|
|||
|
|
// Draw the border
|
|||
|
|
Graphics g = e.Graphics;
|
|||
|
|
|
|||
|
|
if (DockState == DockState.DockBottomAutoHide)
|
|||
|
|
g.DrawLine(SystemPens.ControlLightLight, 0, 1, ClientRectangle.Right, 1);
|
|||
|
|
else if (DockState == DockState.DockRightAutoHide)
|
|||
|
|
g.DrawLine(SystemPens.ControlLightLight, 1, 0, 1, ClientRectangle.Bottom);
|
|||
|
|
else if (DockState == DockState.DockTopAutoHide)
|
|||
|
|
{
|
|||
|
|
g.DrawLine(SystemPens.ControlDark, 0, ClientRectangle.Height - 2, ClientRectangle.Right, ClientRectangle.Height - 2);
|
|||
|
|
g.DrawLine(SystemPens.ControlDarkDark, 0, ClientRectangle.Height - 1, ClientRectangle.Right, ClientRectangle.Height - 1);
|
|||
|
|
}
|
|||
|
|
else if (DockState == DockState.DockLeftAutoHide)
|
|||
|
|
{
|
|||
|
|
g.DrawLine(SystemPens.ControlDark, ClientRectangle.Width - 2, 0, ClientRectangle.Width - 2, ClientRectangle.Bottom);
|
|||
|
|
g.DrawLine(SystemPens.ControlDarkDark, ClientRectangle.Width - 1, 0, ClientRectangle.Width - 1, ClientRectangle.Bottom);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
base.OnPaint(e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|