4种方法实现C#无标题栏窗体的移动
首先C#无标题栏窗体的实现代码
在load时实现
无工具栏+无窗口标题
private void Form1_Load(object sender, EventArgs e)
{
this.ControlBox = false;
this.Text = "";
}
这样就可以实现无标题栏窗体了,示例效果

第一种实现点击窗口内区域移动窗体的方法
重写wndproc,截取在窗体区域内移动的消息,
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
)
{
m.Result = );
}
}
第二种实现方法
private void Form1_Load(object sender, EventArgs e)
{
this.MouseMove+=Form1_MouseMove;
}
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
public static extern int ReleaseCapture();
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
ReleaseCapture();//使鼠标事件对当前窗体持续有效
SendMessage();
}
第三种
截取鼠标在窗体内按下左键时的消息,改为鼠标在标题栏下按下左击的事件实现移动
protected override void WndProc(ref Message m)
{
if(m.Msg==0x201)
{
m.Msg = 0xA1;
m.WParam = );
}
base.WndProc(ref m);
}
第四种最原始的方法
mousedown事件是改变一个bool变量
mousemove时先判断bool变量,移动时设置窗体的location
mouseup时改变bool变量
bool mouse_down = false;//鼠标左键是否被按下
Point mouse_start_point;//记录按下左键时的鼠标位置
Point form_start_point;//记录按下左键时窗口位置
private void Form1_Load(object sender, EventArgs e)
{
this.ControlBox = false;
this.Text = "";
this.MouseMove+=Form1_MouseMove;
this.MouseUp+=Form1_MouseUp;
this.MouseDown+=Form1_MouseDown;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.mouse_down = true;
this.mouse_start_point = Control.MousePosition;
this.form_start_point = this.Location;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
this.mouse_down = false;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if(this.mouse_down==true)
{
this.Location = new Point(this.form_start_point.X + PointToScreen(e.Location).X - this.mouse_start_point.X, this.form_start_point.Y + PointToScreen(e.Location).Y - this.mouse_start_point.Y);
}
}
}
示例代码
http://pan.baidu.com/s/1hq0KTMG
4种方法实现C#无标题栏窗体的移动的更多相关文章
- C# 移动无标题栏窗体的几种方法
第一种,手工移动. 该方法根据鼠标位置实现窗体的移动.网上有很多相关的例子,这里不再多讲. 第二种,调用系统API原理:是当鼠标左键按下时,让系统认为是在标题栏按下的.这里我们用到了winapi里的W ...
- C#实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法
对于无标题栏窗体,也就是FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还 ...
- C#之移动无标题栏窗体功能的实现!...
为实现移动无标题栏窗体的功能,我从网上寻找.整理了以下资料,以备不时之需: 该方法适用于有标题栏和无标题栏窗体,适用于窗体内控件,当然 Form 也不例外, 只须添加 MouseDown.MouseM ...
- C#移动无标题栏窗体的四种代码
第一种采用,需注意窗体上的控件是否把窗体覆盖了...MouseDown.MouseMove.MouseUp事件应该是鼠标所处位置最顶层的控件的事件在窗体的类中声明两个变量private Point m ...
- C# 实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法
/// <summary> /// 实现窗体的最小化 /// </summary> protected override CreateParams CreateParams { ...
- 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示.显示控制台方法如下 1.项目(或者叫“工 ...
- 区间求mex的两种方法
区间求mex的两种方法 1.莫队+分块/莫队+二分+树状数组 2.线段树 预处理1-i的sg值(用一个vis数组,一个cur指针) 预处理nxt数组(a[nxt[i]]=a[i]) 枚举左端点l, 考 ...
- 区间求mex的几种方法
Tags : 总结 莫队 线段树 区间取mex的几种方法 题目大意 无修改,求区间 \(mex\) 做法1 莫队+二分+树状数组 树状数组维护维护桶,每次扫完二分答案,用树状数组判断 \(O(n\sq ...
- C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
随机推荐
- boost::noncopyable
/** * boost::noncopyable 实现单例不用麻烦了,直接从这个继承就行了 */ #include <boost/noncopyable.hpp> class myclas ...
- delphi Base64编码/解码及数据压缩/解压知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
- 流畅python学习笔记第十八章:使用asyncio包处理并发(一)
首先是线程与协程的对比.在文中作者通过一个实例分别采用线程实现和asynchio包实现来比较两者的差别.在多线程的样例中,会用到join的方法,下面来介绍下join方法的使用. 知识点一:当一个进程启 ...
- BCH分叉是一次站队博弈
BCH分叉在即,很多人说BCH本次分叉实质是大佬间的斗争,主要是本次BCH分叉主要分为两大派别: 一派以BCH用户量最大的客户端Bitcoin ABC开发组为主,要在11月15日展开硬分叉升级,主要升 ...
- 【linux】新添加一块硬盘制作LVM卷并进行分区挂载
linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...
- Qt — tableWidget插入复选框
之前不太了解Qt中的相关控件,一直尝试直接在tableview上增加复选框. 但相对来说,在tableview增加复选框的工作量与麻烦程度远超tableWidget. 接下来是如何在Qt的tableW ...
- Java for LeetCode 119 Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- Contiki Rtimer 模块
一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...
- javascript(9)
js中访问函数 p1.abc() p1["abc"]; js中基于对象 == js面向对象
- html5--1.18 div元素与布局
1.18 div元素与布局 1.元素的分类2.div元素与布局 1.元素的分类 块元素:主要特征是会产生换行效果,自动与其他元素分离成两行:通常可以作为容器在内部添加其他元素. 已经学过的块元素有: ...