コード例 #1
0
        private void SetupDockingHintWindows(Bar barMouseOver, IDockInfo barDockInfo)
		{
			Rectangle parentFormScreenRect=Rectangle.Empty;
			const int HINT_EDGE_OFFSET=32;
			if(m_TopDockSite.Parent.Parent!=null)
			{
				parentFormScreenRect=new Rectangle(m_TopDockSite.Parent.PointToScreen(Point.Empty),m_TopDockSite.Parent.Size);
				parentFormScreenRect.Y+=m_TopDockSite.Height;
				parentFormScreenRect.Height-=m_TopDockSite.Height;
			}
			else
			{
				parentFormScreenRect=m_TopDockSite.Parent.Bounds;
				parentFormScreenRect.Y+=m_TopDockSite.Height;
				parentFormScreenRect.Height-=m_TopDockSite.Height;
			}

			if(!this.DesignMode)
			{
				// Left Docking Hint
				if(barDockInfo.CanDockLeft)
				{
					if(m_DockingHintLeft==null)
					{
						m_DockingHintLeft=new DockingHint(eDockingHintSide.Left, GetEffectiveStyle());
						m_DockingHintLeft.Location=new Point(parentFormScreenRect.X+HINT_EDGE_OFFSET,parentFormScreenRect.Y+(parentFormScreenRect.Height-m_DockingHintLeft.Height)/2);
						m_DockingHintLeft.ShowFocusless();
					}
				}
				else if(m_DockingHintLeft!=null)
				{
					m_DockingHintLeft.Close();
					m_DockingHintLeft.Dispose();
					m_DockingHintLeft=null;
				}

				// Right Docking Hint
				if(barDockInfo.CanDockRight)
				{
					if(m_DockingHintRight==null)
					{
						m_DockingHintRight=new DockingHint(eDockingHintSide.Right, GetEffectiveStyle());
						m_DockingHintRight.Location=new Point(parentFormScreenRect.Right-HINT_EDGE_OFFSET-m_DockingHintRight.Width,parentFormScreenRect.Y+(parentFormScreenRect.Height-m_DockingHintRight.Height)/2);
						m_DockingHintRight.ShowFocusless();
					}
				}
				else if(m_DockingHintRight!=null)
				{
					m_DockingHintRight.Close();
					m_DockingHintRight.Dispose();
					m_DockingHintRight=null;
				}

				// Top Docking Hint
				if(barDockInfo.CanDockTop)
				{
					if(m_DockingHintTop==null)
					{
						m_DockingHintTop=new DockingHint(eDockingHintSide.Top, GetEffectiveStyle());
						m_DockingHintTop.Location=new Point(parentFormScreenRect.X+(parentFormScreenRect.Width-m_DockingHintTop.Width)/2,parentFormScreenRect.Y+HINT_EDGE_OFFSET);
						m_DockingHintTop.ShowFocusless();
					}
				}
				else if(m_DockingHintTop!=null)
				{
					m_DockingHintTop.Close();
					m_DockingHintTop.Dispose();
					m_DockingHintTop=null;
				}

				// Bottom Docking Hint
				if(barDockInfo.CanDockBottom)
				{
					if(m_DockingHintBottom==null)
					{
						m_DockingHintBottom=new DockingHint(eDockingHintSide.Bottom, GetEffectiveStyle());
						m_DockingHintBottom.Location=new Point(parentFormScreenRect.X+(parentFormScreenRect.Width-m_DockingHintBottom.Width)/2,parentFormScreenRect.Bottom-HINT_EDGE_OFFSET-m_DockingHintBottom.Height);
						m_DockingHintBottom.ShowFocusless();
					}
				}
				else if(m_DockingHintBottom!=null)
				{
					m_DockingHintBottom.Close();
					m_DockingHintBottom.Dispose();
					m_DockingHintBottom=null;
				}
			}

			// Middle docking hint
			bool bShowMidHint=false;
			eDockingHintSide hintSides=eDockingHintSide.All;
			if(barMouseOver==null)
			{
				hintSides=eDockingHintSide.Top;
				if(barDockInfo.CanDockBottom)
					hintSides=eDockingHintSide.Bottom;
				if(barDockInfo.CanDockLeft)
					hintSides=hintSides | eDockingHintSide.Left;
				if(barDockInfo.CanDockRight)
					hintSides=hintSides | eDockingHintSide.Right;
				if(barDockInfo.CanDockTop)
					hintSides=hintSides | eDockingHintSide.Top;
				else
					hintSides=hintSides & ~(hintSides & eDockingHintSide.Top);
				if(this.IsDocumentDockingEnabled && barDockInfo.CanDockDocument)
				{
					hintSides=eDockingHintSide.All;
				}
			}
			else
			{
				if(!barDockInfo.CanDockTab)
					hintSides=hintSides & ~(hintSides & eDockingHintSide.DockTab);
			}
			
			if(m_DockingHintMiddle==null)
			{
				if(barMouseOver!=null)
					m_DockingHintMiddle=new DockingHint(hintSides,true, GetEffectiveStyle());
				else
                    m_DockingHintMiddle = new DockingHint(hintSides, true, GetEffectiveStyle());
				bShowMidHint=true;
			}
			else
			{
				if(barMouseOver!=null)
					m_DockingHintMiddle.DockingHintSides=hintSides; // eDockingHintSide.All;
				else
					m_DockingHintMiddle.DockingHintSides=hintSides; //eDockingHintSide.Sides;
			}

			Point midLocation=new Point(parentFormScreenRect.X+(parentFormScreenRect.Width-m_DockingHintMiddle.Width)/2,
				parentFormScreenRect.Y+(parentFormScreenRect.Height-m_DockingHintMiddle.Height)/2);

			if(barMouseOver!=null)
			{
				Point p=barMouseOver.PointToScreen(Point.Empty);
				midLocation=new Point(p.X+(barMouseOver.Width-m_DockingHintMiddle.Width)/2,
					p.Y+(barMouseOver.Height-m_DockingHintMiddle.Height)/2);
			}

			Rectangle r=new Rectangle(midLocation,m_DockingHintMiddle.Size);
			if(m_DockingHintLeft!=null && r.IntersectsWith(m_DockingHintLeft.Bounds))
			{
				if(Control.MousePosition.Y<m_DockingHintLeft.Top)
					midLocation.Y=m_DockingHintLeft.Top-m_DockingHintMiddle.Height;
				else
					midLocation.Y=m_DockingHintLeft.Bottom;
			}
			else if(m_DockingHintRight!=null && r.IntersectsWith(m_DockingHintRight.Bounds))
			{
				if(Control.MousePosition.Y<m_DockingHintRight.Top)
					midLocation.Y=m_DockingHintRight.Top-m_DockingHintMiddle.Height;
				else
					midLocation.Y=m_DockingHintRight.Bottom;
			}
			else if(m_DockingHintTop!=null && r.IntersectsWith(m_DockingHintTop.Bounds))
			{
				if(Control.MousePosition.X>m_DockingHintTop.Left)
					midLocation.X=m_DockingHintTop.Right;
				else
					midLocation.X=m_DockingHintTop.Left-m_DockingHintMiddle.Width;
			}
			else if(m_DockingHintBottom!=null && r.IntersectsWith(m_DockingHintBottom.Bounds))
			{
				if(Control.MousePosition.X>m_DockingHintBottom.Left)
					midLocation.X=m_DockingHintBottom.Right;
				else
					midLocation.X=m_DockingHintBottom.Left-m_DockingHintMiddle.Width;
			}

			if(m_DockingHintMiddle.Location!=midLocation)
			{
				m_DockingHintMiddle.Location=midLocation;
			}

			if(bShowMidHint)
			{
				m_DockingHintMiddle.ShowFocusless();
			}

		}
コード例 #2
0
		private void CloseDockingHints()
		{
			if(m_ClosingHints)
				return;
			try
			{
				m_ClosingHints=true;
				if(m_DockingHintLeft!=null)
				{
					NativeFunctions.SetWindowPos(m_DockingHintLeft.Handle,new IntPtr(NativeFunctions.HWND_TOP),0,0,0,0,NativeFunctions.SWP_HIDEWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE | NativeFunctions.SWP_NOSIZE);
					m_DockingHintLeft.Close();
					m_DockingHintLeft.Dispose();
					m_DockingHintLeft=null;
				}

				if(m_DockingHintRight!=null)
				{
					NativeFunctions.SetWindowPos(m_DockingHintRight.Handle,new IntPtr(NativeFunctions.HWND_TOP),0,0,0,0,NativeFunctions.SWP_HIDEWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE | NativeFunctions.SWP_NOSIZE);
					m_DockingHintRight.Close();
					m_DockingHintRight.Dispose();
					m_DockingHintRight=null;
				}

				if(m_DockingHintTop!=null)
				{
					NativeFunctions.SetWindowPos(m_DockingHintTop.Handle,new IntPtr(NativeFunctions.HWND_TOP),0,0,0,0,NativeFunctions.SWP_HIDEWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE | NativeFunctions.SWP_NOSIZE);
					m_DockingHintTop.Close();
					m_DockingHintTop.Dispose();
					m_DockingHintTop=null;
				}

				if(m_DockingHintBottom!=null)
				{
					NativeFunctions.SetWindowPos(m_DockingHintBottom.Handle,new IntPtr(NativeFunctions.HWND_TOP),0,0,0,0,NativeFunctions.SWP_HIDEWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE | NativeFunctions.SWP_NOSIZE);
					m_DockingHintBottom.Close();
					m_DockingHintBottom.Dispose();
					m_DockingHintBottom=null;
				}

				if(m_DockingHintMiddle!=null)
				{
					NativeFunctions.SetWindowPos(m_DockingHintMiddle.Handle,new IntPtr(NativeFunctions.HWND_TOP),0,0,0,0,NativeFunctions.SWP_HIDEWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE | NativeFunctions.SWP_NOSIZE);
					m_DockingHintMiddle.Close();
					m_DockingHintMiddle.Dispose();
					m_DockingHintMiddle=null;
				}
			}
			catch{}
			finally
			{
				m_ClosingHints=false;
			}
		}