实现窗体皮肤美化后进行窗体的移动
2010-05-24 21:22
239 查看
窗体美化(将窗体属性FormBorderStyle设置为none)发现整个窗体不能随鼠标移动了,我曾经用以下代码解决过窗体的移动:
#region 实现点击移动
internal static int WM_NCHITTEST = 0x84;
internal static IntPtr HTCLIENT = (IntPtr)0x1;
internal static IntPtr HTCAPTION = (IntPtr)0x2;
internal static int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
return;
}
if (m.Msg == WM_NCHITTEST)
{
base.WndProc(ref m);
if (m.Result == HTCLIENT)
{
m.HWnd = this.Handle;
m.Result = HTCAPTION;
}
return;
}
base.WndProc(ref m);
}
#endregion
不过发现,按住标题栏(这个标题栏我是用的pannel制作的)没反应,郁闷好几天,最终找到了解决的方法,就是用:
MouseDown和MouseMove事件解决。
具体方法如下:
在窗体的顶端声明:
Point MyOffset;//记录窗体位置
回到设计模式,选中顶端标题栏,选择MouseDown事件:
代码:
MyOffset = new Point(-e.X, -e.Y);
MouseMove事件代码:
//重置窗体位置
if (e.Button == MouseButtons.Left)
{
Point MyPos = Control.MousePosition;
MyPos.Offset(MyOffset.X, MyOffset.Y);
//this.Location =MyPos;
this.DesktopLocation = MyPos;
}
#region 实现点击移动
internal static int WM_NCHITTEST = 0x84;
internal static IntPtr HTCLIENT = (IntPtr)0x1;
internal static IntPtr HTCAPTION = (IntPtr)0x2;
internal static int WM_NCLBUTTONDBLCLK = 0x00A3;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCLBUTTONDBLCLK)
{
return;
}
if (m.Msg == WM_NCHITTEST)
{
base.WndProc(ref m);
if (m.Result == HTCLIENT)
{
m.HWnd = this.Handle;
m.Result = HTCAPTION;
}
return;
}
base.WndProc(ref m);
}
#endregion
不过发现,按住标题栏(这个标题栏我是用的pannel制作的)没反应,郁闷好几天,最终找到了解决的方法,就是用:
MouseDown和MouseMove事件解决。
具体方法如下:
在窗体的顶端声明:
Point MyOffset;//记录窗体位置
回到设计模式,选中顶端标题栏,选择MouseDown事件:
代码:
MyOffset = new Point(-e.X, -e.Y);
MouseMove事件代码:
//重置窗体位置
if (e.Button == MouseButtons.Left)
{
Point MyPos = Control.MousePosition;
MyPos.Offset(MyOffset.X, MyOffset.Y);
//this.Location =MyPos;
this.DesktopLocation = MyPos;
}
相关文章推荐
- Qt实现当鼠标移动到窗体上,窗体由半透明变为不透明
- 利用IrisSkin2.dll皮肤控件美化WINFORM窗体!
- FlickCharm类的理解,实现窗体的移动与拖动
- 在DELPHI中实现无标题窗体的移动最简单的方法
- c#实现随鼠标移动窗体
- C#之移动无标题栏窗体功能的实现!...
- 实现从一个ListBox向另一个ListBox中移动选中项,并按照value进行排序
- android设计实现窗体启动时,显示一个水平进度条,当进行完成后,隐藏该进度条,并显示一张图片
- cocos2d-x 如何使用CCProgressTimer作为血条,实现跟随怪物进行移动,自动掉血,然后死亡。
- C#仿QQ皮肤----基窗体FormBase与基用户控件FormBase1的实现
- 基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
- 窗体皮肤实现 - 重绘窗体非客户区(一)
- 使用C#实现移动无边框窗体
- 用jQuery实现鼠标在table上移动进行样式变化
- Winform窗体半透明,控件不透明,及皮肤美化效果
- Java实现点击按钮弹出新窗体的功能实现,旧窗体不进行操作
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- 使用C#实现移动无边框窗体
- 窗体皮肤实现 - 增加Toolbar的交互性
- android设计 实现窗体启动时,显示一个水平进度条,当进行完成后,隐藏该进度条,并显示一张图 片。