private void UpdateLocationAndSize(WinApi.WINDOWPOS pos) { foreach (YamuiShadowBorder shadowBorder in _shadows) { shadowBorder.SetLocationAndSize(pos.x, pos.y, pos.cx, pos.cy); } }
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); }