zoukankan      html  css  js  c++  java
  • WinForm自定义标题栏(续)

    之前写过一篇文章叫做: WinForm自定义标题栏 的文章,这篇文章主要说了如果自定义窗体的标题栏,后来发现,按文章实现以后还有好多后续的工作要做,在这里再补充一下

    上篇文章实现的效果如图:

    C1$LTQF)O4S(~T~U_{RFIIB

    这个是WinForm的窗体么,边框呢,即便设置了Panel的BorderStyle后,还需要做一些工作去使窗体在Normal状态是可以自动的调节窗体的大小,接下来说一下我的方法

    如何作这样的一个窗体在上一篇文章已经说过了,不同的是不要将窗体的FormBorderStyle设置为None

    1. 一开始只将窗体的ControlBox设置为False,这样窗体的标题栏就会消失了(注:如果Text属性不为空的话标题栏是不会消失的,因此也叫将窗体的Text清空)

    2. 接下来可以使用Panel控件和Dock、Anchor属性进行界面的布局,具体不在这里说了,都很简单

    接下来就写代码了,代码如下:

        
    public frmMain()
        {
            InitializeComponent();
    
            //这一句是设定窗体最大化后的大小,如果不设置,窗体最大化以后会挡住任务栏
         this.MaximumSize = new Size(SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height);
    
        }
    
        private static Point downPosition;   //记录鼠标按下时的坐标
     bool down = false;                   //判断鼠标是状态 True:按下 False:抬起
    
        private void pnlCaption_MouseDown(object sender, MouseEventArgs e)
        {
            downPosition = new Point(e.X, e.Y);
            down = true;
        }
    
        private void pnlCaption_MouseMove(object sender, MouseEventArgs e)
        {
            if (down && e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if (this.WindowState == FormWindowState.Maximized)
                    Normal();   //此处还需要更多的考虑,这一句是为了当窗体最大化时拖拽标题栏可以切换到Normal状态,但是效果不是很理想
            Point currentPosition = Control.MousePosition;
                currentPosition.Offset(-downPosition.X, -downPosition.Y);
                this.Location = currentPosition;
            }
        }
    
        private void pnlCaption_DoubleClick(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Maximized)
            {
                Normal();
            }
            else
            {
                Maximized();
            }
        }
    
        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    
        private void btnMax_Click(object sender, EventArgs e)
        {
            if (FormWindowState.Maximized == WindowState)   
            {
                Normal();
            }
            else if (FormWindowState.Normal == WindowState)  
            {
                Maximized();
            }
        }
    
        private void btnMin_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
    
    
        private void Maximized()
        {
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
        }
    
        private void Normal()
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }
    代码很简单,这里就不写注释了吐舌笑脸

    这样自定义的标题栏就算是完成了,效果如下:

    imageNormal      image最大化的效果

    当最大化是就将窗体的FormBorderStyle切换为None状态,Normal是切换为Sizable状态,这样整个效果还能勉强接受

    不足的是在Nromal状态时标题栏上面的边框比较恶心,哎…… 

    如果哪位路过的朋友有更好的做法,请不吝赐教,谢谢眨眼

  • 相关阅读:
    Keras猫狗大战二:加载模型预测单张图片
    Keras猫狗大战一:小样本4层卷积网络,74%精度
    用fastai ResNet50训练CIFAR10,85%准确度
    Windows10安装cuda、cudnn、pytorch、jupyter、fastai
    Windows10安装anaconda
    pytorch识别CIFAR10:训练ResNet-34(自定义transform,动态调整学习率,准确率提升到94.33%)
    yolov3和darknet opencv版编译安装及基本测试
    pytorch错误:RuntimeError: received 0 items of ancdata解决
    pytorch错误:Missing key(s) in state_dict、Unexpected key(s) in state_dict解决
    pytorch识别CIFAR10:训练ResNet-34(数据增强,准确率提升到92.6%)
  • 原文地址:https://www.cnblogs.com/wangshuai/p/2211023.html
Copyright © 2011-2022 走看看