internal static void DoWindowTitleThumbChangeWindowStateOnMouseDoubleClick(WindowChromeWindow window, MouseButtonEventArgs mouseButtonEventArgs) { // restore/maximize only with left button if (mouseButtonEventArgs.ChangedButton == MouseButton.Left) { // we can maximize or restore the window if the title bar height is set (also if title bar is hidden) var canResize = window.ResizeMode == ResizeMode.CanResizeWithGrip || window.ResizeMode == ResizeMode.CanResize; var mousePos = Mouse.GetPosition(window); var isMouseOnTitlebar = mousePos.Y <= window.TitleBarHeight && window.TitleBarHeight > 0; if (canResize && isMouseOnTitlebar) { #pragma warning disable 618 if (window.WindowState == WindowState.Normal) { ControlzEx.Windows.Shell.SystemCommands.MaximizeWindow(window); } else { ControlzEx.Windows.Shell.SystemCommands.RestoreWindow(window); } #pragma warning restore 618 mouseButtonEventArgs.Handled = true; } } }
internal static void DoWindowTitleThumbOnPreviewMouseLeftButtonUp(WindowChromeWindow window, MouseButtonEventArgs mouseButtonEventArgs) { if (mouseButtonEventArgs.Source == mouseButtonEventArgs.OriginalSource) { Mouse.Capture(null); } }
internal static void DoWindowTitleThumbSystemMenuOnMouseRightButtonUp(WindowChromeWindow window, MouseButtonEventArgs e) { //if (window.ShowSystemMenuOnRightClick) //{ // // show menu only if mouse pos is on title bar or if we have a window with none style and no title bar // var mousePos = e.GetPosition(window); // if ((mousePos.Y <= window.TitleBarHeight && window.TitleBarHeight > 0) || (window.UseNoneWindowStyle && window.TitleBarHeight <= 0)) // { // ShowSystemMenuPhysicalCoordinates(window, window.PointToScreen(mousePos)); // } //} }
internal static void DoWindowTitleThumbMoveOnDragDelta(IWindowsTitleThumb thumb, [NotNull] WindowChromeWindow window, DragDeltaEventArgs dragDeltaEventArgs) { if (thumb == null) { throw new ArgumentNullException(nameof(thumb)); } if (window == null) { throw new ArgumentNullException(nameof(window)); } // drag only if IsWindowDraggable is set to true if (!window.IsWindowDraggable || (!(Math.Abs(dragDeltaEventArgs.HorizontalChange) > 2) && !(Math.Abs(dragDeltaEventArgs.VerticalChange) > 2))) { return; } // tage from DragMove internal code window.VerifyAccess(); //var cursorPos = WinApiHelper.GetPhysicalCursorPos(); // if the window is maximized dragging is only allowed on title bar (also if not visible) var windowIsMaximized = window.WindowState == WindowState.Maximized; var isMouseOnTitlebar = Mouse.GetPosition(thumb).Y <= window.TitleBarHeight && window.TitleBarHeight > 0; if (!isMouseOnTitlebar && windowIsMaximized) { return; } #pragma warning disable 618 // for the touch usage UnsafeNativeMethods.ReleaseCapture(); #pragma warning restore 618 if (windowIsMaximized) { //var cursorXPos = cursorPos.x; EventHandler windowOnStateChanged = null; windowOnStateChanged = (sender, args) => { //window.Top = 2; //window.Left = Math.Max(cursorXPos - window.RestoreBounds.Width / 2, 0); window.StateChanged -= windowOnStateChanged; if (window.WindowState == WindowState.Normal) { Mouse.Capture(thumb, CaptureMode.Element); } }; window.StateChanged += windowOnStateChanged; } var criticalHandle = window.CriticalHandle; // DragMove works too // window.DragMove(); // instead this 2 lines #pragma warning disable 618 NativeMethods.SendMessage(criticalHandle, WM.SYSCOMMAND, (IntPtr)SC.MOUSEMOVE, IntPtr.Zero); NativeMethods.SendMessage(criticalHandle, WM.LBUTTONUP, IntPtr.Zero, IntPtr.Zero); #pragma warning restore 618 }