zoukankan      html  css  js  c++  java
  • Winform编程中定制窗体标题栏

           标题栏是否好看关系到软件的美观度,和用户体验,由于Winform的特殊原因,想实现皮肤是件很不爽的事情,但是偶尔做些小软件又不想看到windows讨厌的标题栏,我的方法就是重新设计标题栏,然后用图片做背景,设置所有控件

    为透明,这样就大大的美化了软件界面

    设置窗体透明和不规则形状

    首先,窗体的FormBorderStyle设置成None,不要控制边框

    TransparencyKey和BackColor颜色设置成相同的,这样,窗体就透明了

    以此为基础,制作透明不规则窗体,可以在窗体上设圆角背景图片(PNG,GIF),也可以绘制

    下面还要解决的是无边框窗体的拖动\关闭等事件处理.

    关闭提示和最小化到系统托盘

        public frmMain()
        {
            InitializeComponent();
            //这一句是设定窗体最大化后的大小,如果不设置,窗体最大化以后会挡住任务栏

    this.MaximumSize = new Size(SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height);
        }

             //窗口关闭提示

            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                DialogResult result = MessageBox.Show("注意:关闭YOMKILLER程序后,你的电脑将不能被保护!\n            确定关闭吗?(Y)/(N)", "初始化", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.No)
                {
                    e.Cancel = true;//如果选择no则不关闭程序
                }

            }

           

            //最小化窗口
            private void Form1_Resize(object sender, EventArgs e)
            {

                if (this.WindowState == FormWindowState.Minimized)
                {
                    NormalToMinimized();//如果使用button按钮的Click事件,则不需要这个条件判断
                }
            }

            //双击托盘图标打开

            private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    this.MinimizedToNormal();//如果使用的MouseDoubleClick事件,可以不要这个条件判断
                }
            }

            

            //设定为默认窗口,显示主窗体 的方法

            private void MinimizedToNormal()
            {
                this.Visible = true;
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;

            }

            //设定为最小化,并隐藏主窗口  的方法
            private void NormalToMinimized()
            {
                this.WindowState = FormWindowState.Minimized;
                this.Visible = false;
                this.notifyIcon1.Visible = true;
            }

    模拟窗体移动

    1.在窗体的类中声明两个变量
    private Point mouseOffset; //记录鼠标指针的坐标
    private bool isMouseDown = false; //记录鼠标按键是否按下

    2.创建该窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序
    private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        int xOffset;
        int yOffset;
        if (e.Button == MouseButtons.Left)
        {
            xOffset = -e.X ;
            yOffset = -e.Y ;
            mouseOffset = new Point(xOffset, yOffset);
            isMouseDown = true;
        }
    }

    private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (isMouseDown)
        {
            Point mousePos = Control.MousePosition;
            mousePos.Offset(mouseOffset.X, mouseOffset.Y);
            Location = mousePos;
        }
    }

    private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        // 修改鼠标状态isMouseDown的值
        // 确保只有鼠标左键按下并移动时,才移动窗体
        if (e.Button == MouseButtons.Left)
        {
            isMouseDown = false;
        }
    }

    标准按钮

    1.最小化

    WindowState = FormWindowState.Minimized;

    2.最大化

    WindowState == FormWindowState.Maximized;

    3.还原为正常

    WindowState == FormWindowState.Normal;

    4.关闭

    Application.Exit();

  • 相关阅读:
    学习Timer定时器
    C++ 延时等待(sleep/timer/wait)
    MFC学习问题总结
    node.js
    总结
    关于Windows
    关于数组
    每周一次
    每周一次
    每周一次
  • 原文地址:https://www.cnblogs.com/mane/p/1837885.html
Copyright © 2011-2022 走看看