#region 改变窗体大小
const int WM_NCHITTEST = 0x0084;
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)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
{
Point vPoint = new Point((int)m.LParam & 0xFFFF,(int)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
//判断:仅当当前窗体状态不是最大化时,相关鼠标事件生效
if (this.WindowState != FormWindowState.Maximized)
{
if (vPoint.X < 10)
{
if (vPoint.Y < 10)
{
m.Result = (IntPtr)HTTOPLEFT;
}
else if (vPoint.Y > this.Height - 10)
{
m.Result = (IntPtr)HTBOTTOMLEFT;
}
else
{
m.Result = (IntPtr)HTLEFT;
}
}
else if (vPoint.X > this.Width - 10)
{
if (vPoint.Y < 10)
{
m.Result = (IntPtr)HTTOPRIGHT;
}
else if (vPoint.Y > this.Height - 10)
{
m.Result = (IntPtr)HTBOTTOMRIGHT;
}
else
{
m.Result = (IntPtr)HTRIGHT;
}
}
else if (10 < vPoint.X && vPoint.X < this.Width - 10)
{
if (vPoint.Y < 10)
{
m.Result = (IntPtr)HTTOP;
}
else if (vPoint.Y > this.Height - 10)
{
m.Result = (IntPtr)HTBOTTOM;
}
}
}
break;
}
}
}
#endregion
将窗体的Padding中将所有的值,均设为1即可(或更大,只要不为0就行。当然,数值越大,也意味着窗体四周的“露白”越多,同时,在调整大小时,也会越容易被鼠标“捕捉”到。一般来说,窗体的左、右边框容易被捕捉
转自:http://www.beijibear.com/article/10-09/cheongyuhin5.html