40 lines
921 B
C#
40 lines
921 B
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Interop;
|
|
|
|
namespace WpfStyleableWindow.StyleableWindow
|
|
{
|
|
public static class SystemMenuManager
|
|
{
|
|
public static void ShowMenu(Window targetWindow, Point menuLocation)
|
|
{
|
|
if (targetWindow == null)
|
|
{
|
|
throw new ArgumentNullException("TargetWindow is null.");
|
|
}
|
|
int x;
|
|
int y;
|
|
try
|
|
{
|
|
x = Convert.ToInt32(menuLocation.X);
|
|
y = Convert.ToInt32(menuLocation.Y);
|
|
}
|
|
catch (OverflowException)
|
|
{
|
|
x = 0;
|
|
y = 0;
|
|
}
|
|
uint msg = 274u;
|
|
uint num = 0u;
|
|
uint num2 = 256u;
|
|
IntPtr handle = new WindowInteropHelper(targetWindow).Handle;
|
|
IntPtr systemMenu = NativeMethods.GetSystemMenu(handle, bRevert: false);
|
|
int num3 = NativeMethods.TrackPopupMenuEx(systemMenu, num | num2, x, y, handle, IntPtr.Zero);
|
|
if (num3 != 0)
|
|
{
|
|
NativeMethods.PostMessage(handle, msg, new IntPtr(num3), IntPtr.Zero);
|
|
}
|
|
}
|
|
}
|
|
}
|