C#之设置无边框后如何移动窗体(转)

转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html

第一种,利用windows的消息机制来实现:

首先﹐.定义鼠標左鍵按下時的Message标识﹔其次﹐在Form1_MouseDown方法﹐讓操作系統誤以為是按下标题栏。

1.定义鼠標左鍵按下時的Message标识

1    private const int WM_NCLBUTTONDOWN = 0XA1;   //.定义鼠標左鍵按下
2    private const int HTCAPTION     = 2;

2.讓操作系統誤以為是按下标题栏

1 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
2    {
3     //為當前的應用程序釋放鼠標鋪獲
4     ReleaseCapture();
5     //發送消息﹐讓系統誤以為在标题栏上按下鼠標
6     SendMessage((int)this.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
7    }

3.申明程序中所Windows的API函數

1    [DllImport("user32.dll",EntryPoint="SendMessageA")]
2    private static extern int SendMessage(int hwnd,int wMsg,int wParam,int lParam);
3
4    [DllImport("user32.dll")]
5    private static extern int ReleaseCapture();

第二种,通过自定鼠标左键按下时产生的事件:

* 首先将窗体的边框样式修改为None,让窗体没有标题栏
 * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
 * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
 * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
 * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
 */

1 private bool isMouseDown = false;
2 private Point FormLocation;     //form的location
3 private Point mouseOffset;      //鼠标的按下位置
1 private void Form1_MouseDown(object sender, MouseEventArgs e)
2 {
3     if (e.Button == MouseButtons.Left)
4     {
5         isMouseDown = true;
6         FormLocation = this.Location;
7         mouseOffset = Control.MousePosition;
8     }
9 }
1 private void Form1_MouseUp(object sender, MouseEventArgs e)
2 {
3     isMouseDown = false;
4 }
 1 private void Form1_MouseMove(object sender, MouseEventArgs e)
 2 {
 3     int _x = 0;
 4     int _y = 0;
 5     if (isMouseDown)
 6     {
 7         Point pt = Control.MousePosition;
 8         _x = mouseOffset.X - pt.X;
 9         _y = mouseOffset.Y - pt.Y;
10
11         this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y);
12     }
13 }
时间: 2024-12-06 04:07:02

C#之设置无边框后如何移动窗体(转)的相关文章

C# 创建无边框,任意样式窗体,无边框窗体的移动

界面布局如下: 窗体中添加一个PictureBox控件 有边框窗体 无边框窗体 代码实现: public partial class Form2 : Form { public Form2() { InitializeComponent(); } #region 创建无边框,任意样式窗体 private void Form2_Load(object sender, EventArgs e) { this.TransparencyKey = Color.White; //设置默认透明色 this.

去除安卓自定义Dialog黑色背景,设置无边框,透明

我们在自定义Dialog的时候,往往会希望除去安卓系统定义背景和标题,以便于更好的显示我们自己想要的效果. 其实我们只需要注意几个地方就行了. 1.在Style文件的中定义Dialog的主题 <style name="MyDialog"> <item name="android:windowFrame">@null</item> <item name="android:windowBackground"&

Qt - QDialog,QWidget实现模态及非模态(模态Widget不能有父窗口,如果设置无边框就不能阻塞父窗口,但是可以强行设置指定Qt::Dialog,还可以setAttribute(Qt::WA_ShowModal),很多讲究)good

在Qt中QDialog为“窗口”,而QWidget为“部件”,首先还是了解下<Qt 窗口与部件的概念>. 对于 QDialog 的模态及非模态是直接可以实现的,很多课本中都会提到,此处总结下. 模态QDialog 方式一: QDialog dlg(this);dlg.exec(); 方式二: QDialog *pDlg=new QDialog(this);pDlg->setModal(true);pDlg->show(); 非模态QDialog QDialog *pDlg=new

让文本框不显示出来。(设置无边框)。私教转课

<div class="banner-top ba3">                        <label>原卡号/姓名</label>                        <input type="hidden" id="vc_cardcode" name="vc_cardcode" value="" />                

Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this->setStyleSheet(“QWidget{border-top-left-radius:15px;border-top-right-radius:5px;}”)); 使用的主要是使用border-radius 属性,关于这个属性,可选的样式有 border-top-left-radius 设置

无边框窗体设置

#region 方法:无边框拖动窗体 Point mouseOff;//鼠标移动位置变量 bool RightFlag;//标签是否为左键 private void groupMenu_MouseUp(object sender, MouseEventArgs e) { if (RightFlag) { RightFlag = false;//释放鼠标后标注为false; } } private void groupMenu_MouseMove(object sender, MouseEvent

C# WPF 设置窗口无边框

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" AllowsTransparency="True" WindowStyle="None" > AllowsTransparency="True&quo

Qt5.3中qml ApplicationWindow设置窗口无边框问题

这个版本的qt在这里有点bug.. 设置ApplicationWindow的flags属性为Qt.FramelessWindowHint的确可以使程序无边框,但是同时程序在任务栏的图标也没了. 看文档发现 ApplicationWindow 是由 QQuickWindow 实现的,QQuickWindow 又继承于 QWindw. 直接创建一个QWindow对象实验了一下,代码如下 QWindow window; window.setFlags( Qt::FramelessWindowHint

移动窗体(边框设置为None后的窗体)

1 #region 移动窗体(边框设置为None后的窗体) 2 3 /// <summary> 4 /// 重写WndProc方法,实现窗体移动和禁止双击最大化 5 /// </summary> 6 /// <param name="m">Windows 消息</param> 7 protected override void WndProc(ref Message m) 8 { 9 switch (m.Msg) 10 { 11 case