You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.1 KiB
123 lines
4.1 KiB
/*************************************************************************************
|
|
|
|
Toolkit for WPF
|
|
|
|
Copyright (C) 2007-2020 Xceed Software Inc.
|
|
|
|
This program is provided to you under the terms of the XCEED SOFTWARE, INC.
|
|
COMMUNITY LICENSE AGREEMENT (for non-commercial use) as published at
|
|
https://github.com/xceedsoftware/wpftoolkit/blob/master/license.md
|
|
|
|
For more features, controls, and fast professional support,
|
|
pick up the Plus Edition at https://xceed.com/xceed-toolkit-plus-for-wpf/
|
|
|
|
Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
|
|
|
|
***********************************************************************************/
|
|
|
|
|
|
namespace Microsoft.Windows.Shell
|
|
{
|
|
using System;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using System.Windows.Interop;
|
|
using Standard;
|
|
|
|
public static class SystemCommands
|
|
{
|
|
public static RoutedCommand CloseWindowCommand
|
|
{
|
|
get; private set;
|
|
}
|
|
public static RoutedCommand MaximizeWindowCommand
|
|
{
|
|
get; private set;
|
|
}
|
|
public static RoutedCommand MinimizeWindowCommand
|
|
{
|
|
get; private set;
|
|
}
|
|
public static RoutedCommand RestoreWindowCommand
|
|
{
|
|
get; private set;
|
|
}
|
|
public static RoutedCommand ShowSystemMenuCommand
|
|
{
|
|
get; private set;
|
|
}
|
|
|
|
static SystemCommands()
|
|
{
|
|
CloseWindowCommand = new RoutedCommand( "CloseWindow", typeof( SystemCommands ) );
|
|
MaximizeWindowCommand = new RoutedCommand( "MaximizeWindow", typeof( SystemCommands ) );
|
|
MinimizeWindowCommand = new RoutedCommand( "MinimizeWindow", typeof( SystemCommands ) );
|
|
RestoreWindowCommand = new RoutedCommand( "RestoreWindow", typeof( SystemCommands ) );
|
|
ShowSystemMenuCommand = new RoutedCommand( "ShowSystemMenu", typeof( SystemCommands ) );
|
|
}
|
|
|
|
private static void _PostSystemCommand( Window window, SC command )
|
|
{
|
|
IntPtr hwnd = new WindowInteropHelper( window ).Handle;
|
|
if( hwnd == IntPtr.Zero || !NativeMethods.IsWindow( hwnd ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
NativeMethods.PostMessage( hwnd, WM.SYSCOMMAND, new IntPtr( ( int )command ), IntPtr.Zero );
|
|
}
|
|
|
|
public static void CloseWindow( Window window )
|
|
{
|
|
Verify.IsNotNull( window, "window" );
|
|
_PostSystemCommand( window, SC.CLOSE );
|
|
}
|
|
|
|
public static void MaximizeWindow( Window window )
|
|
{
|
|
Verify.IsNotNull( window, "window" );
|
|
_PostSystemCommand( window, SC.MAXIMIZE );
|
|
}
|
|
|
|
public static void MinimizeWindow( Window window )
|
|
{
|
|
Verify.IsNotNull( window, "window" );
|
|
_PostSystemCommand( window, SC.MINIMIZE );
|
|
}
|
|
|
|
public static void RestoreWindow( Window window )
|
|
{
|
|
Verify.IsNotNull( window, "window" );
|
|
_PostSystemCommand( window, SC.RESTORE );
|
|
}
|
|
|
|
/// <summary>Display the system menu at a specified location.</summary>
|
|
/// <param name="screenLocation">The location to display the system menu, in logical screen coordinates.</param>
|
|
public static void ShowSystemMenu( Window window, Point screenLocation )
|
|
{
|
|
Verify.IsNotNull( window, "window" );
|
|
ShowSystemMenuPhysicalCoordinates( window, DpiHelper.LogicalPixelsToDevice( screenLocation ) );
|
|
}
|
|
|
|
internal static void ShowSystemMenuPhysicalCoordinates( Window window, Point physicalScreenLocation )
|
|
{
|
|
const uint TPM_RETURNCMD = 0x0100;
|
|
const uint TPM_LEFTBUTTON = 0x0;
|
|
|
|
Verify.IsNotNull( window, "window" );
|
|
IntPtr hwnd = new WindowInteropHelper( window ).Handle;
|
|
if( hwnd == IntPtr.Zero || !NativeMethods.IsWindow( hwnd ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
IntPtr hmenu = NativeMethods.GetSystemMenu( hwnd, false );
|
|
|
|
uint cmd = NativeMethods.TrackPopupMenuEx( hmenu, TPM_LEFTBUTTON | TPM_RETURNCMD, ( int )physicalScreenLocation.X, ( int )physicalScreenLocation.Y, hwnd, IntPtr.Zero );
|
|
if( 0 != cmd )
|
|
{
|
|
NativeMethods.PostMessage( hwnd, WM.SYSCOMMAND, new IntPtr( cmd ), IntPtr.Zero );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|