示例#1
0
 private void UpdateLocationAndSize(WinApi.WINDOWPOS pos)
 {
     foreach (YamuiShadowBorder shadowBorder in _shadows)
     {
         shadowBorder.SetLocationAndSize(pos.x, pos.y, pos.cx, pos.cy);
     }
 }
示例#2
0
        private IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            IntPtr result = IntPtr.Zero;

            switch (msg)
            {
            case WinApi.WM_WINDOWPOSCHANGED:
            case WinApi.WM_WINDOWPOSCHANGING:
                // Prevent the window being moved.
                if (!this.IgnoreLock && this.NoMove)
                {
                    WinApi.WINDOWPOS windowPos = WinApi.WINDOWPOS.FromPointer(lParam);
                    if (this.NoMove)
                    {
                        windowPos.flags |= WinApi.SWP_NOMOVE;
                    }

                    windowPos.CopyToPointer(lParam);
                }
                break;

            case WinApi.WM_ENTERSIZEMOVE:
                this.firstEvent = true;
                this.OnEnterSizeMove();
                break;

            case WinApi.WM_EXITSIZEMOVE:
                if (this.IsMoving)
                {
                    this.OnMoveComplete();
                }

                this.IsMoving = false;
                break;

            case WinApi.WM_MOVING:
                MovementEventArgs eventArgs = new MovementEventArgs();

                eventArgs.Cursor = WinApi.GetCursorPos();
                eventArgs.Rect   = WinApi.RECT.FromPointer(lParam).ToRect();

                eventArgs.IsFirst = this.firstEvent;
                if (this.firstEvent)
                {
                    this.mouseStart  = eventArgs.Cursor;
                    this.initialRect = eventArgs.Rect;
                    this.mouseOffset = this.mouseStart - this.initialRect.TopLeft;
                }

                eventArgs.InitialRect  = this.initialRect;
                eventArgs.SupposedRect = this.initialRect;

                if (!this.firstEvent)
                {
                    eventArgs.SupposedRect.X = eventArgs.Cursor.X - this.mouseOffset.X;
                    eventArgs.SupposedRect.Y = eventArgs.Cursor.Y - this.mouseOffset.Y;
                }

                this.IsMoving = true;

                // Call the event handler.
                this.OnMoving(eventArgs);

                if (!eventArgs.NewInitialRect.IsEmpty)
                {
                    this.initialRect = eventArgs.NewInitialRect;
                    if (this.firstEvent)
                    {
                        this.mouseOffset = this.mouseStart - this.initialRect.TopLeft;
                    }
                    else
                    {
                        this.mouseOffset.X = this.initialRect.Width / 2;
                        this.mouseOffset.Y = this.initialRect.Height / 2;
                        if (Math.Abs(this.mouseOffset.X) > this.initialRect.Width)
                        {
                        }
                        if (Math.Abs(this.mouseOffset.Y) > this.initialRect.Height)
                        {
                        }
                    }
                }

                this.firstEvent = false;
                if (eventArgs.Handled)
                {
                    new WinApi.RECT(eventArgs.Rect).CopyToPointer(lParam);
                    handled = true;
                    result  = new IntPtr(1);
                }

                break;
            }

            return(result);
        }