Exemplo n.º 1
0
        public void RemoveDropSurface(DropSurface surface)
        {
            mDropSurfaces.Remove(surface);
            //mDropSurfacesWithDragOver.Remove(surface);

            mAssistWin.HostSurface = null;
        }
Exemplo n.º 2
0
        //List<DropSurface> mDropSurfacesWithDragOver = new List<DropSurface>();
        //Stack<DropSurface> mDropEnterSurfaceStack = new Stack<DropSurface>();
        public void AddDropSurface(DropSurface surface)
        {
            if (mDropSurfaces.Contains(surface))
            {
                return;
            }

            mDropSurfaces.Add(surface);

            //var ctrl = surface as DependencyObject;
            //while(ctrl != null && (!(ctrl is Window)))
            //{
            //    ctrl = VisualTreeHelper.GetParent(ctrl);
            //}
            //var win = ctrl as Window;
            //if(win != null)
            //{
            //    if (!EditorCommon.Program.ShowedWindows.Contains(win))
            //        EditorCommon.Program.ShowedWindows.Add(win);
            //}
        }
Exemplo n.º 3
0
        private void MoveDrag(Point point)
        {
            //var winPtr = Program.WindowFromPoint((int)point.X, (int)point.Y);
            if (mMouseWin.DockElement == null)
            {
                return;
            }

            //if (Mouse.Captured != this)
            //    CaptureMouse();

            DropSurface topSurface = null;
            var         groupName  = mMouseWin.DockElement.DockGroup;

            foreach (var surface in mDropSurfaces)
            {
                if (surface.SurfaceRect.Contains(point))
                {
                    if (groupName != DockableAllGroup && surface.Group != groupName)
                    {
                        continue;
                    }
                    if (topSurface == null)
                    {
                        topSurface = surface;
                    }
                    else
                    {
                        if (surface.HostWin.Topmost == topSurface.HostWin.Topmost)
                        {
                            var surfaceHwnd    = new WindowInteropHelper(surface.HostWin).Handle;
                            var topSurfaceHwnd = new WindowInteropHelper(topSurface.HostWin).Handle;
                            if (surfaceHwnd == topSurfaceHwnd)
                            {
                                // 同一窗口
                                DependencyObject parent = surface;
                                do
                                {
                                    parent = VisualTreeHelper.GetParent(parent);
                                }while (parent != null && parent != topSurface);
                                if (parent == topSurface)
                                {
                                    topSurface = surface;
                                }
                            }
                            else
                            {
                                var surfaceZOrder    = ResourceLibrary.Win32.GetWindowZOrder(surfaceHwnd);
                                var topSurfaceZOrder = ResourceLibrary.Win32.GetWindowZOrder(topSurfaceHwnd);
                                if ((surfaceZOrder > topSurfaceZOrder) || (surface.HostWin.Priority > topSurface.HostWin.Priority))
                                {
                                    topSurface = surface;
                                }
                            }
                        }
                        else if (surface.HostWin.Topmost)
                        {
                            topSurface = surface;
                        }
                    }
                }
            }

            if (mAssistWin.HostSurface != null)
            {
                if (topSurface != null)
                {
                    if (mAssistWin.HostSurface != topSurface)
                    {
                        if (mAssistWin.HostSurface.HostWin.Topmost == topSurface.HostWin.Topmost)
                        {
                            var hostSurfaceHwnd   = new WindowInteropHelper(mAssistWin.HostSurface.HostWin).Handle;
                            var hostSurfaceZOrder = ResourceLibrary.Win32.GetWindowZOrder(hostSurfaceHwnd);
                            var topSurfaceHwnd    = new WindowInteropHelper(topSurface.HostWin).Handle;
                            var topSurfaceZOrder  = ResourceLibrary.Win32.GetWindowZOrder(topSurfaceHwnd);
                            if ((hostSurfaceZOrder < topSurfaceZOrder) || (mAssistWin.HostSurface.HostWin.Priority < topSurface.HostWin.Priority))
                            {
                                mAssistWin.HostSurface.OnDragLeave(point);
                                mAssistWin.HostSurface = null;

                                topSurface.OnDragEnter(point);
                                mAssistWin.HostSurface = topSurface;
                            }
                        }
                        else if (topSurface.HostWin.Topmost)
                        {
                            mAssistWin.HostSurface.OnDragLeave(point);
                            mAssistWin.HostSurface = null;

                            topSurface.OnDragEnter(point);
                            mAssistWin.HostSurface = topSurface;
                        }
                    }
                }

                if (!mAssistWin.HostSurface.SurfaceRect.Contains(point))
                {
                    mAssistWin.HostSurface.OnDragLeave(point);
                    mAssistWin.HostSurface = null;
                }
            }
            else
            {
                if (topSurface != null)
                {
                    topSurface.OnDragEnter(point);
                    mAssistWin.HostSurface = topSurface;
                }
            }

            /*foreach (var surface in mDropSurfaces)
             * {
             *  if (!surface.Active)
             *      continue;
             *
             *  if (surface.SurfaceRect.Contains(point))
             *  {
             *      if (!mDropSurfacesWithDragOver.Contains(surface))
             *      {
             *          mDropSurfacesWithDragOver.Add(surface);
             *
             *          //var win = Program.GetParent(surface as FrameworkElement, typeof(DockAbleWindow)) as Window;
             *          //if (win == null)
             *          //    continue;
             *
             *          //if(((new System.Windows.Interop.WindowInteropHelper(this)).Handle) == winPtr)
             *              mDropEnterSurfaceStack.Push(surface);
             *          //surface.OnDragEnter(point);
             *          //mAssistWin.HostSurface = surface;
             *      }
             *      else
             *      {
             *          surface.OnDragOver(point);
             *      }
             *  }
             *  else
             *  {
             *      if (mDropSurfacesWithDragOver.Contains(surface))
             *      {
             *          mDropSurfacesWithDragOver.Remove(surface);
             *          //surface.OnDragLeave(point);
             *          //mAssistWin.HostSurface = null;
             *      }
             *  }
             * }
             *
             * if (mAssistWin.HostSurface != null)
             * {
             *  if (!mAssistWin.HostSurface.SurfaceRect.Contains(point))
             *  {
             *      mAssistWin.HostSurface.OnDragLeave(point);
             *      mAssistWin.HostSurface = null;
             *
             *      while (mDropEnterSurfaceStack.Count > 0)
             *      {
             *          var surface = mDropEnterSurfaceStack.Pop();
             *          if (surface.SurfaceRect.Contains(point))
             *          {
             *              surface.OnDragEnter(point);
             *              mAssistWin.HostSurface = surface;
             *              break;
             *          }
             *      }
             *  }
             * }
             * else
             * {
             *  while (mDropEnterSurfaceStack.Count > 0)
             *  {
             *      var surface = mDropEnterSurfaceStack.Pop();
             *      if (!surface.Active)
             *          continue;
             *
             *      if (surface.SurfaceRect.Contains(point))
             *      {
             *          surface.OnDragEnter(point);
             *          mAssistWin.HostSurface = surface;
             *          break;
             *      }
             *  }
             * }*/

            mAssistWin.OnDragOver(point);
        }