/// <summary>
/// 窗体跟随鼠标移动的标记
/// </summary>
private bool normalmoving = false;
/// <summary>
/// 最大化窗体跟随鼠标Normal和移动的标记
/// </summary>
private bool maxmoving = true;
/// <summary>
/// 临时存储上一次鼠标位置
/// </summary>
private Point oldMousePosition;
/// <summary>
/// 右侧最大化/最小化/关闭按钮的总宽度
/// </summary>
int ritghtbuttonslength = 180;   

关闭按钮相关操作

    #region 页面关闭的相关操作
private void picBoxMainClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void picBoxMainClose_MouseEnter(object sender, EventArgs e)
{
this.picBoxMainClose.Image =global::LocDevelopDesClient.Properties.Resources.close_mainMouse;
}
private void picBoxMainClose_MouseLeave(object sender, EventArgs e)
{
this.picBoxMainClose.Image = global::LocDevelopDesClient.Properties.Resources.close_main;
}
#endregion

窗体最大化相关操作

     #region 窗体最大化的相关操作
    //包括标题栏双击窗口的变化及页面最大化图表点击
private void picBoxMaxSize_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else if (this.WindowState == FormWindowState.Normal)
{
this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
}
} private void picBoxMaxSize_MouseEnter(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize_mouse;
}
else if (this.WindowState == FormWindowState.Maximized)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal_mouse;
} } private void picBoxMaxSize_MouseLeave(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.maxSize;
}
else if (this.WindowState == FormWindowState.Maximized)
{
this.picBoxMaxSize.Image = global::LocDevelopDesClient.Properties.Resources.normal;
}
}
#endregion

窗体最小化相关操作

    #region 窗体最小化的相关操作
private void picBoxMinSize_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal || this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Minimized;
}
}
private void picBoxMinSize_MouseEnter(object sender, EventArgs e)
{
this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize_mouse;
} private void picBoxMinSize_MouseLeave(object sender, EventArgs e)
{
this.picBoxMinSize.Image = global::LocDevelopDesClient.Properties.Resources.minsize1;
}
#endregion

标题栏相关操作

     #region 主页面标题栏的相关操作

        private void palTitle_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
oldMousePosition = new Point(-e.X, -e.Y);
normalmoving = true;
}
} private void palTitle_MouseUp(object sender, MouseEventArgs e)
{
maxmoving = true;
//pnlFirstMenu.Cursor = Cursors.Default;
if (normalmoving)
{
normalmoving = false;
}
}

private void palTitle_MouseMove(object sender, MouseEventArgs e)
{
//如果leftlag为true则进行移动
if (!normalmoving) return;
if (this.WindowState == FormWindowState.Maximized && e.Button == MouseButtons.Left && maxmoving)
{
this.WindowState = FormWindowState.Normal;
//当窗体最大时,鼠标点击的位置比例
double bili = e.X * 1.0 / Screen.PrimaryScreen.Bounds.Width;
//如果点击位置太靠右,则窗体normal后,鼠标会在右侧按钮上方
//计算缩小后数据离右侧的距离
double rightlength = (1.0 - bili) * this.Width;
int x = 0;
if (rightlength < ritghtbuttonslength)
{
x = (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
//更改oldMousePosition的位置
oldMousePosition.X += (int)(e.X - (bili * this.Width) + ritghtbuttonslength - rightlength);
}
else
{
x = (int)(e.X - (bili * this.Width));
//更改oldMousePosition的位置
oldMousePosition.X += (int)(e.X - (bili * this.Width));
}
this.Location = new Point(x, 0); }
else if (e.Button == MouseButtons.Left)
{
{
Point mouseSet = MousePosition;
mouseSet.Offset(oldMousePosition.X, oldMousePosition.Y); //设置移动后的位置
Location = mouseSet;
if (MousePosition.Y <= 0)
{
this.MaximumSize = new Size(Screen.FromControl(this).WorkingArea.Width, Screen.FromControl(this).WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
maxmoving = false;
}
}
}
}
#endregion

c# 窗体相关操作(最大化/最小化/关闭/标题栏)的更多相关文章

  1. Electron 无边框窗口最大化最小化关闭功能

    Electron 无边框窗口最大化最小化关闭功能 目的 实现无边框窗口,并添加最大化最小化和关闭功能 前提 了解Electron 主进程和渲染进程的通讯 了解 BrowserWindow相关功能 操作 ...

  2. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...

  3. PyQt:无边框自定义标题栏及最大化最小化窗体大小调整

    环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...

  4. 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角

    原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角   还是按下“ALT +F2”组合键,输入g ...

  5. C#程序实现窗体的最大化/最小化

    C#程序实现窗体的最大化/最小化 http://blog.csdn.net/jiangqin115/article/details/41251215 private void button1_Clic ...

  6. Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)

    //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...

  7. delphi ,1)控件根据窗口大小,一直居中显示 2)显示最大化最小化按钮控件

    一.控件根据窗口大小,一直居中显示 1)onResize:当窗体尺寸改变时发生 例子:如何使控件随窗口的放大和缩小动态改变自己的大小,使控件“保存.返回”在窗口变大变小中随着变. 在Panel调用 p ...

  8. layer满屏/禁止最大化最小化 可以做选择框使用

    1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...

  9. C#winform如何主窗口最大化最小化默认大小

    this.WindowState = FormWindowState.Minimized; bool b = true; private void button2_Click(object sende ...

随机推荐

  1. 函数的参数python教程

    一:函数 什么是函数? 函数就类似于工具 提前定义之后可以反复使用 代码冗余 结构清晰 修改繁杂等问题 二:函数的语法结构 def 函数名(参数1,参数2) '''函数注释''' 函数体代码 retu ...

  2. Ali云组件概念

  3. 二进制方式搭建Kubernetes高可用集群

    转:https://jiangxl.blog.csdn.net/article/details/120428703 详细:https://developer.aliyun.com/article/78 ...

  4. Redis 源码简洁剖析 04 - Sorted Set 有序集合

    Sorted Set 是什么 Sorted Set 命令及实现方法 Sorted Set 数据结构 跳表(skiplist) 跳表节点的结构定义 跳表的定义 跳表节点查询 层数设置 跳表插入节点 zs ...

  5. python小兵之时间模块

    Python  日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间 ...

  6. 学习MyBatis必知必会(6)~Mapper基础的拓展

    一.typeAlias 类型别名[自定义别名.系统自带别名] 1.类型别名:为 Java 类型设置一个缩写名字. 它仅用于 XML 配置,意在降低冗余的全限定类名书写 2.配置自定义别名: (1)方式 ...

  7. react之withRouter的作用

    withRouter的作用:把不是通过路由切换过来的组件,将react-router的history.location和match三个对象传入到props对象上: 默认情况下必须是经过路由匹配渲染的组 ...

  8. JAVA变量的数据类型

    1. 整型 byte   代表一个字节的大小   8bit  2(8)   -128~127        256 short  代表两个字节的大小  16bit  2(16)  -2(15)~2(1 ...

  9. 【转】Python 并行分布式框架 Celery

    原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...

  10. python unittest控制用例的执行顺序

    为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的 ...