| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- /*******************************************************************************
- * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
- * 类的信息:
- * 1.程序名称:DockPane.cs
- * 2.功能描述:类文件
- * 编辑履历:
- * 作者 日期 版本 修改内容
- * 陈晓野 2014/09/01 1.00 新建
- *******************************************************************************/
- using System.Drawing;
- using System.Windows.Forms;
- namespace Dongke.IBOSS.PRD.Basics.DockPanel
- {
- /// <summary>
- /// 类文件
- /// </summary>
- partial class DockPane
- {
- private class SplitterControl : Control, ISplitterDragSource
- {
- DockPane m_pane;
- public SplitterControl(DockPane pane)
- {
- SetStyle(ControlStyles.Selectable, false);
- m_pane = pane;
- }
- public DockPane DockPane
- {
- get { return m_pane; }
- }
- private DockAlignment m_alignment;
- public DockAlignment Alignment
- {
- get { return m_alignment; }
- set
- {
- m_alignment = value;
- if (m_alignment == DockAlignment.Left || m_alignment == DockAlignment.Right)
- Cursor = Cursors.VSplit;
- else if (m_alignment == DockAlignment.Top || m_alignment == DockAlignment.Bottom)
- Cursor = Cursors.HSplit;
- else
- Cursor = Cursors.Default;
- if (DockPane.DockState == DockState.Document)
- Invalidate();
- }
- }
- protected override void OnPaint(PaintEventArgs e)
- {
- base.OnPaint(e);
- if (DockPane.DockState != DockState.Document)
- return;
- Graphics g = e.Graphics;
- Rectangle rect = ClientRectangle;
- if (Alignment == DockAlignment.Top || Alignment == DockAlignment.Bottom)
- g.DrawLine(SystemPens.ControlDark, rect.Left, rect.Bottom - 1, rect.Right, rect.Bottom - 1);
- else if (Alignment == DockAlignment.Left || Alignment == DockAlignment.Right)
- g.DrawLine(SystemPens.ControlDarkDark, rect.Right - 1, rect.Top, rect.Right - 1, rect.Bottom);
- }
- protected override void OnMouseDown(MouseEventArgs e)
- {
- base.OnMouseDown(e);
- if (e.Button != MouseButtons.Left)
- return;
- DockPane.DockPanel.BeginDrag(this, Parent.RectangleToScreen(Bounds));
- }
- #region ISplitterDragSource Members
- void ISplitterDragSource.BeginDrag(Rectangle rectSplitter)
- {
- }
- void ISplitterDragSource.EndDrag()
- {
- }
- bool ISplitterDragSource.IsVertical
- {
- get
- {
- NestedDockingStatus status = DockPane.NestedDockingStatus;
- return (status.DisplayingAlignment == DockAlignment.Left ||
- status.DisplayingAlignment == DockAlignment.Right);
- }
- }
- Rectangle ISplitterDragSource.DragLimitBounds
- {
- get
- {
- NestedDockingStatus status = DockPane.NestedDockingStatus;
- Rectangle rectLimit = Parent.RectangleToScreen(status.LogicalBounds);
- if (((ISplitterDragSource)this).IsVertical)
- {
- rectLimit.X += MeasurePane.MinSize;
- rectLimit.Width -= 2 * MeasurePane.MinSize;
- }
- else
- {
- rectLimit.Y += MeasurePane.MinSize;
- rectLimit.Height -= 2 * MeasurePane.MinSize;
- }
- return rectLimit;
- }
- }
- void ISplitterDragSource.MoveSplitter(int offset)
- {
- NestedDockingStatus status = DockPane.NestedDockingStatus;
- double proportion = status.Proportion;
- if (status.LogicalBounds.Width <= 0 || status.LogicalBounds.Height <= 0)
- return;
- else if (status.DisplayingAlignment == DockAlignment.Left)
- proportion += ((double)offset) / (double)status.LogicalBounds.Width;
- else if (status.DisplayingAlignment == DockAlignment.Right)
- proportion -= ((double)offset) / (double)status.LogicalBounds.Width;
- else if (status.DisplayingAlignment == DockAlignment.Top)
- proportion += ((double)offset) / (double)status.LogicalBounds.Height;
- else
- proportion -= ((double)offset) / (double)status.LogicalBounds.Height;
- DockPane.SetNestedDockingProportion(proportion);
- }
- #region IDragSource Members
- Control IDragSource.DragControl
- {
- get { return this; }
- }
- #endregion
- #endregion
- }
- private SplitterControl m_splitter;
- private SplitterControl Splitter
- {
- get { return m_splitter; }
- }
- internal Rectangle SplitterBounds
- {
- set { Splitter.Bounds = value; }
- }
- internal DockAlignment SplitterAlignment
- {
- set { Splitter.Alignment = value; }
- }
- }
- }
|