winform中移動無邊框窗體隻需要重寫
WndProc
方法即可,一下為實作代碼:
const
int
HTLEFT = 10;
const
int
HTRIGHT = 11;
const
int
HTTOP = 12;
const
int
HTTOPLEFT = 13;
const
int
HTTOPRIGHT = 14;
const
int
HTBOTTOM = 15;
const
int
HTBOTTOMLEFT = 0x10;
const
int
HTBOTTOMRIGHT = 17;
protected
override
void
WndProc(
ref
Message m)
{
switch
(m.Msg)
{
case
0x0084:
base
.WndProc(
ref
m);
Point vPoint =
new
Point((
int
)m.LParam & 0xFFFF,
(
int
)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
if
(vPoint.X <= 5)
if
(vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPLEFT;
else
if
(vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMLEFT;
else
m.Result = (IntPtr)HTLEFT;
else
if
(vPoint.X >= ClientSize.Width - 5)
if
(vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPRIGHT;
else
if
(vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMRIGHT;
else
m.Result = (IntPtr)HTRIGHT;
else
if
(vPoint.Y <= 5)
m.Result = (IntPtr)HTTOP;
else
if
(vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOM;
break
;
case
0x0201:
//滑鼠左鍵按下的消息
m.Msg = 0x00A1;
//更改消息為非客戶區按下滑鼠
m.LParam = IntPtr.Zero;
//預設值
m.WParam =
new
IntPtr(2);
//滑鼠放在标題欄内
base
.WndProc(
ref
m);
break
;
default
:
base
.WndProc(
ref
m);
break
;
}
}