Winform 拦截最小化、最大化、关闭事件【整理】

时间:2024-09-01 22:04:08
 const int WM_SYSCOMMAND = 0x112;
//窗体关闭消息
const int SC_CLOSE = 0xf060;
//窗体最小化消息
const int SC_MINIMIZE = 0xf020;
//窗体最大化消息
const int SC_MAXIMIZE = 0xf030;
//窗体还原消息
const int SC_NOMAL = 0xf120;
//窗体还原消息
const int SC_RESTORE = ; //窗体按钮的拦截函数
protected override void WndProc(ref Message m)
{ if (m.Msg == WM_SYSCOMMAND)
{
//If m.WParam.ToInt32() = SC_RESTORE Then
// '拦截还原按钮
// Exit Sub
//End If if (m.WParam.ToInt32() == SC_NOMAL)
{
//拦截还原按钮 return;
}
//if (m.WParam.ToInt32() == SC_MINIMIZE)
//{
// //拦截最小化按钮
// //这里写操作代码 // return;
//}
if (m.WParam.ToInt32() == SC_MAXIMIZE)
{
//拦截窗体最大化按钮
//..................... return;
} //窗体关闭消息
if (m.WParam.ToInt32() == SC_CLOSE)
{
if (MessageBox.Show("您确认要退出吗?", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
System.Environment.Exit(System.Environment.ExitCode);
}
else
{
return;
} }
}
base.WndProc(ref m); } }

VB

  Const WM_SYSCOMMAND As Integer = &H112
Const SC_CLOSE As Integer = &HF060 '窗体关闭消息
Const SC_MINIMIZE As Integer = &HF020 '窗体最小化消息
Const SC_MAXIMIZE As Integer = &HF030 '窗体最大化消息
Const SC_NOMAL As Integer = &HF120 '窗体还原消息
Const SC_RESTORE As Integer = '窗体还原消息 '窗体按钮的拦截函数
Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_SYSCOMMAND Then
'If m.WParam.ToInt32() = SC_RESTORE Then
' '拦截还原按钮
' Exit Sub
'End If If m.WParam.ToInt32() = SC_NOMAL Then
'拦截还原按钮 Exit Sub
End If
If m.WParam.ToInt32() = SC_MINIMIZE Then
'拦截最小化按钮
'这里写操作代码 Exit Sub
End If
If m.WParam.ToInt32() = SC_MAXIMIZE Then
'拦截窗体最大化按钮
'..................... Exit Sub
End If
'拦截双击标题栏、移动窗体的系统消息
If m.Msg <> &HA3 AndAlso m.Msg <> &H3 AndAlso m.WParam <> &HF012 Then
MyBase.WndProc(m)
End If If m.WParam.ToInt32() = SC_CLOSE Then Exit Sub End If
End If
MyBase.WndProc(m) End Sub

最小化、最大化、关闭按钮不显示

this.ControlBox = false;   // 设置不出现关闭按钮