博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#:form的窗体属性formborderstyle设置为none后就不能移动了
阅读量:7241 次
发布时间:2019-06-29

本文共 2187 字,大约阅读时间需要 7 分钟。

摘自:

1.获取窗体的最大化、最小化事件:

(其实windows操作系统的事件处理靠的就是消息,所以我们可以从windows的消息队列中找到窗体最大化、最小化、关闭的消息,应用程序就是靠这些消息来工作的)做用应用程序时想自己控制窗体的最大化最小化并作出相关处理时候,可以重写窗体的WndProc方法,实现自己想要的最大化、最小化效果。如果使用窗体的Resize(调整大小时候发生)事件也可以监控窗体的状态,但有时候不能实现想要的效果。比如动态的改变窗体最大化大小的时候。

private int WM_SYSCOMMAND = 0x112;

        private long SC_MAXIMIZE = 0xF030;
        private long SC_MINIMIZE = 0xF020;
        private long SC_CLOSE = 0xF060;

protected override void WndProc(ref   Message m)//参数为windows的消息

        {
            if (m.Msg == WM_SYSCOMMAND)
            {
                if (m.WParam.ToInt64() == SC_MAXIMIZE)
                {
                    if (this.Height == 300)
                    {
                        this.Size = new Size(311, 90);
                    }
                    else
                    {
                        this.Size = new Size(300,300);
                    }
                    return;
                }
                if (m.WParam.ToInt64() == SC_MINIMIZE)
                {
                    WindowState = FormWindowState.Minimized;
                    return;
                }
                if (m.WParam.ToInt64() == SC_CLOSE)
                {
                    this.Close();
                    return;
                }
            }
            base.WndProc(ref   m);
        }

2.打造个性化得窗体:

以前发现一些的按钮好像是加载窗体的标题栏的,于是自己就尝试将控件拖到到窗体的标题栏(不要笑,每个人都有犯傻的时候)结果可想而知,后来才发现将窗体的FormBorderStyle属性设置为None,然后控件就可以直接拖到窗体的顶部了。但是这时候窗体已经没有了标题栏,窗体的移动、最大化、最小化、关闭这些需要自己写代码来完成。

窗体的移动:

        bool formMove = false;//窗体是否移动

        Point formPoint;//记录窗体的位置

private void Form4_MouseDown(object sender, MouseEventArgs e)//鼠标按下

        {
            formPoint = new Point();
            int xOffset;
            int yOffset;
            if (e.Button == MouseButtons.Left)
            {
                xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
                yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
                formPoint = new Point(xOffset, yOffset);
                formMove = true;//开始移动
            }
        }

private void Form4_MouseMove(object sender, MouseEventArgs e)//鼠标移动

        {
            if (formMove == true)
            {
                Point mousePos = Control.MousePosition;
                mousePos.Offset(formPoint.X, formPoint.Y);
                Location = mousePos;
            }
        }

private void Form4_MouseUp(object sender, MouseEventArgs e)//鼠标松开

        {
            if (e.Button == MouseButtons.Left)//按下的是鼠标左键
            {
                formMove = false;//停止移动
            }
        }

窗体的最大化、最小化和关闭:

需要自己拖三个picturebox控件到窗体的右上角,最大化、最小化和关闭的图标就自己去找了。添加picturebox的单击事件。如果要实现一些特效可以加入picturebox的MouseEnter、MouseLeave事件来更换图片。

private void pictureBox1_Click(object sender, EventArgs e)

        {
                 this.WindowState=FormWindowState.Minimized;//最小化
        }

private void pictureBox2_Click(object sender, EventArgs e)

        {

                      WindowState = FormWindowState.Maximized;//最大化

        }

private void pictureBox3_Click(object sender, EventArgs e)

        {
            this.Close();
        }

 

 

转载地址:http://ryybm.baihongyu.com/

你可能感兴趣的文章
servlet实现文件上传,预览,下载和删除
查看>>
master..xp_fileexist
查看>>
想了解概率图模型?你要先理解图论的基本定义与形式
查看>>
win7配置两个tomcat(8 & 7)
查看>>
Spring开发工具Spring Tools Suite(STS)
查看>>
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
查看>>
weblogic为同一domain下的不同server添加不同参数
查看>>
MapReduce中的Join
查看>>
Thread.setDaemon设置说明
查看>>
图像灰度化
查看>>
Java常用工具类之ArrayUtil
查看>>
utuntu16.04安装caffe+Matlab2017a+opencv3.1+CUDA8.0+cudnn6.0
查看>>
netty中的ChannelHandler和ChannelPipeline
查看>>
数据结构 -- 栈
查看>>
官方Java编码规范
查看>>
浏览器神器--vimium
查看>>
由支付宝当面付引发的NatApp方便调试回调
查看>>
进程与线程的一个简单解释
查看>>
SQLServer图数据库一些优点
查看>>
基于贪心算法求解TSP问题(JAVA)
查看>>