在启用和禁用关闭按钮已经没有问题了,但对最小化、最大化、还原和移动一直有问题,我的代码如下:
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hwnd, bool bRevert);
[DllImport("user32.dll")]
static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable); const uint MF_BYCOMMAND = 0x00; //按命令方式
const uint MF_GRAYED = 0x01; //灰掉
const uint MF_DISABLED = 0x02; //不可用 /// <summary>
/// 控制按钮
/// </summary>
public enum ControlButton : uint { CloseButton = 0xF060, MaximizeButton = 0xF030, MinimizeButton = 0xF020, RestoreButton = 0xF120, MoveButton = 0xF010 }; public static bool EnableControlButton(IntPtr hForm, bool enable, ControlButton bt)
{
IntPtr hMenu = GetSystemMenu(hForm, false);
bool result = false; if (hMenu != IntPtr.Zero)
{
//启用
if (enable)
{
if (bt != ControlButton.CloseButton)
{
result = DeleteMenu(hMenu, (uint)bt, 0);
} result = EnableMenuItem(hMenu, (uint)bt, 0);
}
//禁用
else
{
if (bt != ControlButton.CloseButton)
{
result = DeleteMenu(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
} result = EnableMenuItem(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED); }
} return result;
}
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hwnd, bool bRevert);
[DllImport("user32.dll")]
static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable); const uint MF_BYCOMMAND = 0x00; //按命令方式
const uint MF_GRAYED = 0x01; //灰掉
const uint MF_DISABLED = 0x02; //不可用 /// <summary>
/// 控制按钮
/// </summary>
public enum ControlButton : uint { CloseButton = 0xF060, MaximizeButton = 0xF030, MinimizeButton = 0xF020, RestoreButton = 0xF120, MoveButton = 0xF010 }; public static bool EnableControlButton(IntPtr hForm, bool enable, ControlButton bt)
{
IntPtr hMenu = GetSystemMenu(hForm, false);
bool result = false; if (hMenu != IntPtr.Zero)
{
//启用
if (enable)
{
if (bt != ControlButton.CloseButton)
{
result = DeleteMenu(hMenu, (uint)bt, 0);
} result = EnableMenuItem(hMenu, (uint)bt, 0);
}
//禁用
else
{
if (bt != ControlButton.CloseButton)
{
result = DeleteMenu(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
} result = EnableMenuItem(hMenu, (uint)bt, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED); }
} return result;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货