Winform无边框窗体(FormBorderStyle属性设为None)自定义移动
为了界面的好看,有时候需要将窗体FormBorderStyle属性设为None,这样就可以根据自己的喜欢来设计界面。但这样窗体无法进行移动的。而且默认的窗体(FormBorderStyle=Sizable)只有点击窗体边框才能移动,点击内容界面也是无法移动。根据网友们的介绍和总结,有两种比较简单的实现方法。
方法一:通过记录窗体的位置,然后利用MouseDown、MouseUp、MouseMove这三个事件实现窗体的移动。
bool isMouseDown = false;
Point currentFormLocation = new Point(); //当前窗体位置
Point currentMouseOffset = new Point(); //当前鼠标的按下位置
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = true;
currentFormLocation = this.Location;
currentMouseOffset = Control.MousePosition;
}
} private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
} private void Form1_MouseMove(object sender, MouseEventArgs e)
{
int rangeX = , rangeY = ; //计算当前鼠标光标的位移,让窗体进行相同大小的位移
if (isMouseDown)
{
Point pt = Control.MousePosition;
rangeX = currentMouseOffset.X - pt.X;
rangeY = currentMouseOffset.Y - pt.Y;
this.Location = new Point(currentFormLocation.X - rangeX, currentFormLocation.Y - rangeY);
}
}
第二种方法:利用windows的消息机制来实现(转自:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html)
//首先﹐.定义鼠標左鍵按下時的Message标识﹔其次﹐在Form1_MouseDown方法﹐讓操作系統誤以為是按下标题栏。
//1.定义鼠標左鍵按下時的Message标识
private const int WM_NCLBUTTONDOWN = 0XA1; //.定义鼠標左鍵按下
private const int HTCAPTION = ; //2.讓操作系統誤以為是按下标题栏
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//為當前的應用程序釋放鼠標鋪獲
ReleaseCapture();
//發送消息﹐讓系統誤以為在标题栏上按下鼠標
SendMessage((int)this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, );
} //3.申明程序中所Windows的API函數
[DllImport("user32.dll",EntryPoint="SendMessageA")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam); [DllImport("user32.dll")]
private static extern int ReleaseCapture();
Winform无边框窗体(FormBorderStyle属性设为None)自定义移动的更多相关文章
- C#自定义Winform无边框窗体
C#自定义Winform无边框窗体 在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF.或者一些第三方的库等.本例中将采用WinF ...
- WinForm - 无边框窗体自定义移动
为了界面的好看,有时候需要将窗体FormBorderStyle属性设为None,这样就可以根据自己的喜欢来设计界面.但这样窗体无法进行移动的.而且默认的窗体(FormBorderStyle=Sizab ...
- C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- C#自定义按钮、自定义WinForm无边框窗体、自定义MessageBox窗体
C#自定义按钮.自定义WinForm无边框窗体.自定义MessageBox窗体 C#自定义Button按钮控件 效果展示 C#自定义Winform无边框窗体 效果展示 C#自定义无边框MessageB ...
- WinForm无边框窗体移动方法
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- WinForm 无边框窗体改变尺寸及移动窗体
#region 无边框窗体移动改变大小 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); ...
- WinForm 无边框窗体和timer控件
一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图 ...
- winform无边框窗体更改大小
实现方式一: const int HTLEFT = 10; const int HTRIGHT = 11; const int HTTOP = 12; const int HTTOPLEFT = 13 ...
随机推荐
- Android定调的发展
首先,介绍一下Android系统支持的铃声格式. 有下面几种: 64赫兹Midi,AAC.AAC+.AMR.WAV.MP3.Real Audio.WMA.OGG等格式. 将音频文件设置成铃声非常eas ...
- JavaScript面向对象旅程(下)
JavaScript面向对象旅程 剪不断,理还乱,是离愁. 前面已经提到过新语言开发的两个步骤,分别是:一.定义基本的数据类型,完善结构化编程语言的设计:二.为函数类型绑定this的概念,好在对象的方 ...
- Forbidden You don't have permission to access / on this server.
原文:Forbidden You don't have permission to access / on this server. Forbidden You don't have permissi ...
- ThreadLocal可能引起的内存泄露(转)
threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...
- MTK6572横屏的调试过程
电视剧集:系统MTK缺省的系统源代码,Phone模式.底部有三个虚拟按键.需求为,设置成默认横屏,设定一个合理的虚拟按键方案. ------------------------------------ ...
- Linux netstat订购具体解释
简单介绍 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics).masquerade 连接.多播成员 (Multicast Memb ...
- iphone手机版降级
想减少移动版本号.你能下载下来你想要的版本在苹果开发者网站,或"信誉"或可以下载到其他网站的iPhone下载固件固件网站.然后打开iTunes,进入 然后按着(alt).同一时候用 ...
- iOS学习笔记---简单的学习总结
1.xcode6.0官方的版本必须是OS X10.9.4而以上的版本安装前: 2,xcode6.0正式版创建命令行项目时,无法选择swift语言:可是创建iOS应用项目时能够选择swift语言. 3, ...
- thinkphp学习笔记3—项目编译和调试模式
原文:thinkphp学习笔记3-项目编译和调试模式 1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并 ...
- 《Javascript权威指南》十六学习笔记:BOM资源---BOM基本应用
BOM基本应用包括:管理浏览器历史记录.得到处理和解决浏览器的信息.本文介绍了这些应用程序. 一.浏览历史管理 1.history对象的方法和属性 History 对象包括用户(在浏览器窗体中)訪问过 ...