/// <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. JVM之栈、堆、方法区(三)

    一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...

  2. uni微信小程序优化,几行代码就能省100kb的主包空间?

    不是标题党,我们公司的项目确确实实是省下了100kb的主包空间,而且还是在没有牺牲任何的性能和业务的前提下实现的. 但是100kb是根据项目大小,所以你用这个插件可能省下超过100kb或者更少. 直接 ...

  3. Lesson2——Pandas库下载和安装

    pandas目录 简介 Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而 ...

  4. 对战平台虚拟War3局域网的原理对战平台虚拟War3局域网的原理

    转载请注明来源:https://www.cnblogs.com/hookjc/ 以War3为例,启动魔兽后,首先是如何看见主机的问题:魔兽是通过TCP/UDP协议进行数据发送的,那如何实现看到对方?我 ...

  5. Activity的生命周期 (必须掌握)

      onCreate 方法 当Activity第一次启动的时候调用   onDestroy 方法 当Activity销毁的时候调用   onStart() 方法 当Activity变成可见的时候调用  ...

  6. #pragma mark指令

    1.#pragma mark指令的使用 功能:简单来说就是对代码的分组,方便代码查找和导航用的 它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开.一些类(尤其是一些控制器 ...

  7. 优化UITableViewCell高度计算的那些事 by --胡 xu

    这篇总结你可以读到: UITableView高度计算和估算的机制 不同iOS系统在高度计算上的差异 iOS8 self-sizing cell UITableView+FDTemplateLayout ...

  8. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  9. 给 zsh 自定义命令添加参数自动补全

    有时我会自定义一些 zsh 命令,以便提升某些高频操作的效率.本文记录我给一个自定义命令添加参数自动补全的方法. 场景 我自定义了一个 zsh 命令 gmt,执行 gmt <b2>,可以将 ...

  10. 第2章 selenium开发环境的搭建

    前端技术: html:网页的基础,一种标记语言,显示数据: JS:前端脚本语言,解释型语言,在页面中添加交互行为 xml:扩展标记语言,用来传输和存储数据 css:层叠样式表,用来表现HTML或XML ...