| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /*************************************************************************************
- Extended WPF Toolkit
- Copyright (C) 2007-2013 Xceed Software Inc.
- This program is provided to you under the terms of the Microsoft Public
- License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
- For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
- 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);
- }
- }
- }
- }
|