protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
// 屏蔽傳入的訊息事件
this.WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
if (m.Msg == WM_SYSCOMMAND && ((int)m.WParam == SC_MINIMIZE || (int)m.WParam == SC_CLOSE))
{
//最小化到系統欄
this.Hide();
return;
}
base.WndProc(ref m);
}
重寫 WndProc函數來同時實現無標題列的表單移動和禁止雙擊表單最大化
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x84;
const int HTCLIENT = 0x01;
const int HTCAPTION = 0x02;
const int WM_SYSCOMMAND = 0x112;
const int SC_MAXMIZE = 0xF030;
const int WM_NCLBUTTONDBLCLK = 0xA3;
switch (m.Msg)
{
case 0x4e:
case 0xd:
case 0xe:
case 0x14:
base.WndProc(ref m);
break;
case WM_NCHITTEST://滑鼠點任意位置後可以拖動表單
this.DefWndProc(ref m);
if (m.Result.ToInt32() == HTCLIENT)
{
m.Result = new IntPtr(HTCAPTION);
return;
}
break;
case WM_NCLBUTTONDBLCLK://禁止雙擊最大化
Console.WriteLine(this.WindowState);
return;
break;
default:
base.WndProc(ref m);
break;
}
}
補充一個修改註冊表的方法
可以用在某表單或者某控制項的MouseEnter和MouseLeave事件中
在HKEY_CURRENT_USER\Control Panel\Desktop的WheelScrollLines的值4改變就行了,0表示禁止滾輪,1表示開啟滾輪