1
2
3
4
5
6
7
8
9
10
11
12
|
禁用窗口上的关闭按钮 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);
} |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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函数来同时实现无标题栏的窗体移动和禁止双击窗体最大化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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 ; } } |