WinForm自定义标题栏(再续)
2011-10-14 23:24
309 查看
今天在网上找到看到一篇博客<<C#改变无边框窗体大小>>,说的是WinForm的FormBorderStyle=None时如何在运行时调整窗体的大小,我之前的做法是通过判断像素来调整鼠标的样式,然后在改变窗体的大小,这边文章说的是通过重载窗体默认的系统消息来实现该功能,文章非常好…
转载自:http://www.beijibear.com/article/10-09/cheongyuhin5.html
const intWM_NCHITTEST = 0x0084;
const intHTLEFT = 10; //左边界
const intHTRIGHT = 11; //右边界
const intHTTOP = 12; //上边界
const intHTTOPLEFT = 13; //左上角
const intHTTOPRIGHT = 14; //右上角
const intHTBOTTOM = 15; //下边界
const intHTBOTTOMLEFT = 0x10; //左下角
const intHTBOTTOMRIGHT = 17; //右下角
protected override voidWndProc(refMessagem)
{
base.WndProc(refm);
switch(m.Msg)
{
caseWM_NCHITTEST:
{
PointvPoint = newPoint((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;
}
}
}
将窗体的Padding中将所有的值,均设为1即可(或更大,只要不为0就行。当然,数值越大,也意味着窗体四周的“露白”越多,同时,在调整大小时,也会越容易被鼠标“捕捉”到。一般来说,窗体的左、右边框容易被捕捉
转载自:http://www.beijibear.com/article/10-09/cheongyuhin5.html
const intWM_NCHITTEST = 0x0084;
const intHTLEFT = 10; //左边界
const intHTRIGHT = 11; //右边界
const intHTTOP = 12; //上边界
const intHTTOPLEFT = 13; //左上角
const intHTTOPRIGHT = 14; //右上角
const intHTBOTTOM = 15; //下边界
const intHTBOTTOMLEFT = 0x10; //左下角
const intHTBOTTOMRIGHT = 17; //右下角
protected override voidWndProc(refMessagem)
{
base.WndProc(refm);
switch(m.Msg)
{
caseWM_NCHITTEST:
{
PointvPoint = newPoint((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;
}
}
}
将窗体的Padding中将所有的值,均设为1即可(或更大,只要不为0就行。当然,数值越大,也意味着窗体四周的“露白”越多,同时,在调整大小时,也会越容易被鼠标“捕捉”到。一般来说,窗体的左、右边框容易被捕捉
相关文章推荐
- Winform自定义窗体样式,实现标题栏可灵活自定义
- WinForm自定义标题栏(续)
- WinForm自定义标题栏
- WinForm自定义标题栏(续)
- WinForm自定义标题栏(再续)
- Winform C#标题栏自定义样式
- [DForm]我也来做自定义Winform之另类标题栏重绘
- WinForm 之 自定义标题栏的窗体移动
- NET 2.0中WinForm自定义的程序配置文件Settings.setting使用方法
- C# winform 自定义边框
- C# WinForm窗体自定义功能快捷键
- WinForm------自定义YearMonthEdit组件
- Android自定义title bar(标题栏)
- Android自定义标题栏填充不满的解决方法
- Android自定义标题栏
- 自定义控件系列之应用篇——自定义标题栏控件
- WINFORM自定义皮肤制作(上)
- 自定义Activity的标题栏
- Android 自定义标题栏(title栏)
- WinForm窗体中ComboBox控件自定义高度和选项文本居中、选项高亮