internal static void DoWindowTitleThumbOnPreviewMouseLeftButtonUp(SimpleMetroWindow window, MouseButtonEventArgs mouseButtonEventArgs) { if (mouseButtonEventArgs.Source == mouseButtonEventArgs.OriginalSource) { Mouse.Capture(null); } }
internal static void DoWindowTitleThumbSystemMenuOnMouseRightButtonUp(SimpleMetroWindow 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 DoWindowTitleThumbChangeWindowStateOnMouseDoubleClick(SimpleMetroWindow 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 = true; //// var isMouseOnTitlebar = mousePos.Y <= window.TitlebarHeight && window.TitlebarHeight > 0; if (canResize && isMouseOnTitlebar) { if (window.WindowState == WindowState.Maximized) { SystemCommands.RestoreWindow(window); } else { SystemCommands.MaximizeWindow(window); } mouseButtonEventArgs.Handled = true; } } }
internal static void DoWindowTitleThumbMoveOnDragDelta(IMetroThumb thumb, SimpleMetroWindow 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 = NativeMethods.GetCursorPos(); // 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; ////} // for the touch usage UnsafeNativeMethods.ReleaseCapture(); 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 NativeMethods.SendMessage(criticalHandle, WM.SYSCOMMAND, (IntPtr)SC.MOUSEMOVE, IntPtr.Zero); NativeMethods.SendMessage(criticalHandle, WM.LBUTTONUP, IntPtr.Zero, IntPtr.Zero); }