mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-25 19:38:37 +08:00
76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
using mRemoteNG.Tools;
|
|
|
|
namespace mRemoteNG.UI.Menu
|
|
{
|
|
// This class creates new menu items to menu that appears when you right click the top of the app (where the window title is)
|
|
public class AdvancedWindowMenu : IDisposable
|
|
{
|
|
private readonly WindowMenu _windowMenu;
|
|
private readonly int[] _sysMenSubItems = new int[51];
|
|
|
|
public AdvancedWindowMenu(IWin32Window boundControl)
|
|
{
|
|
_windowMenu = new WindowMenu(boundControl.Handle);
|
|
}
|
|
|
|
public Screen GetScreenById(int id)
|
|
{
|
|
for (var i = 0; i <= _sysMenSubItems.Length - 1; i++)
|
|
{
|
|
if (_sysMenSubItems[i] != id) continue;
|
|
return Screen.AllScreens[i];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public void OnDisplayChanged(object sender, EventArgs e)
|
|
{
|
|
ResetScreenList();
|
|
BuildAdditionalMenuItems();
|
|
}
|
|
|
|
private void ResetScreenList()
|
|
{
|
|
_windowMenu.Reset();
|
|
}
|
|
|
|
public void BuildAdditionalMenuItems()
|
|
{
|
|
// option to send main form to another screen
|
|
var popMen = _windowMenu.CreatePopupMenuItem();
|
|
for (var i = 0; i <= Screen.AllScreens.Length - 1; i++)
|
|
{
|
|
_sysMenSubItems[i] = 200 + i;
|
|
_windowMenu.AppendMenuItem(popMen, WindowMenu.Flags.MF_STRING, new IntPtr(_sysMenSubItems[i]),
|
|
Language.Screen + " " + Convert.ToString(i + 1));
|
|
}
|
|
_windowMenu.InsertMenuItem(_windowMenu.SystemMenuHandle, 0,
|
|
WindowMenu.Flags.MF_POPUP | WindowMenu.Flags.MF_BYPOSITION, popMen,
|
|
Language.SendTo);
|
|
// option to show/hide menu strips
|
|
_windowMenu.InsertMenuItem(_windowMenu.SystemMenuHandle, 1,
|
|
WindowMenu.Flags.MF_BYPOSITION, new IntPtr(0),
|
|
Language.ShowHideMenu);
|
|
// separator
|
|
_windowMenu.InsertMenuItem(_windowMenu.SystemMenuHandle, 2,
|
|
WindowMenu.Flags.MF_BYPOSITION | WindowMenu.Flags.MF_SEPARATOR, IntPtr.Zero,
|
|
null);
|
|
}
|
|
|
|
private void Dispose(bool disposing)
|
|
{
|
|
if (!disposing) return;
|
|
|
|
_windowMenu?.Dispose();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
}
|
|
} |