📄 systemmenu.cs
字号:
namespace Imps.Client.Pc.BizControls
{
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class SystemMenu
{
private IntPtr m_SysMenu = IntPtr.Zero;
internal const uint MF_OWNERDRAW = 0x100;
internal const uint MF_STRING = 0;
internal const uint MIIM_FTYPE = 0x100;
[DllImport("USER32", EntryPoint="AppendMenuW", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
private static extern int apiAppendMenu(IntPtr MenuHandle, int Flags, int NewID, string Item);
[DllImport("USER32", EntryPoint="GetSystemMenu", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
private static extern IntPtr apiGetSystemMenu(IntPtr WindowHandle, int bReset);
[DllImport("USER32", EntryPoint="InsertMenuW", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
private static extern int apiInsertMenu(IntPtr hMenu, int Position, int Flags, int NewId, string Item);
public bool AppendMenu(int ID, string Item)
{
return this.AppendMenu(ID, Item, ItemFlags.mfUnchecked);
}
public bool AppendMenu(int ID, string Item, ItemFlags Flags)
{
return (apiAppendMenu(this.m_SysMenu, (int) Flags, ID, Item) == 0);
}
public bool AppendSeparator()
{
return this.AppendMenu(0, "", ItemFlags.mfSeparator);
}
public static SystemMenu FromForm(Form Frm)
{
SystemMenu menu = new SystemMenu();
menu.m_SysMenu = apiGetSystemMenu(Frm.Handle, 0);
if (menu.m_SysMenu == IntPtr.Zero)
{
throw new NoSystemMenuException();
}
return menu;
}
public void GetMenuItem()
{
MENUITEMINFO lpmii = new MENUITEMINFO();
lpmii.cbSize = (uint) Marshal.SizeOf(typeof(MENUITEMINFO));
lpmii.cch = 0x100;
lpmii.fMask = 0x100;
lpmii.fType = 0;
lpmii.dwTypeData = new string(' ', 0x100);
GetMenuItemInfo(this.m_SysMenu, 4, true, ref lpmii);
}
[DllImport("user32.dll")]
public static extern bool GetMenuItemInfo(IntPtr hMenu, uint uItem, bool fByPosition, ref MENUITEMINFO lpmii);
public bool InsertMenu(int Pos, int ID, string Item)
{
return this.InsertMenu(Pos, ItemFlags.mfByPosition, ID, Item);
}
public bool InsertMenu(int Pos, ItemFlags Flags, int ID, string Item)
{
return (apiInsertMenu(this.m_SysMenu, Pos, (int) Flags, ID, Item) == 0);
}
public bool InsertSeparator(int Pos)
{
return this.InsertMenu(Pos, ItemFlags.mfSeparator | ItemFlags.mfByPosition, 0, "");
}
public static void ResetSystemMenu(Form Frm)
{
apiGetSystemMenu(Frm.Handle, 1);
}
public static bool VerifyItemID(int ID)
{
if (ID < 0xf000)
{
return (ID > 0);
}
return false;
}
[StructLayout(LayoutKind.Sequential)]
public struct MENUITEMINFO
{
public uint cbSize;
public uint fMask;
public uint fType;
public uint fState;
public uint wID;
public IntPtr hSubMenu;
public IntPtr hbmpChecked;
public IntPtr hbmpUnchecked;
public string dwTypeData;
public IntPtr dwItemData;
public uint cch;
public IntPtr hbmpItem;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -