zoukankan      html  css  js  c++  java
  • [C# WinForm] 窗体美化

    前两天想用 mfc 写一个自绘的窗体,折腾了两天把我劝退了,原因是 mfc 对控件透明以及除 bmp 以外的图片支持的很不友好,做出的效果差强人意。 总而言之,我今后再也不用 mfc 搞美化了 , 艹


    大牛写的控件类库

    https://github.com/LYingSiMon/NetWinformControl


    设置无边框

    (1)设置窗体的 FormBorderStyle 为 None。
    在这里插入图片描述

    (2)添加事件,MouseDown、MouseMove、MouseUp ,并分别写入如下代码(目的是让窗口可被拖动)

    bool beginMove = false;
    int currentXPosition;
    int currentYPosition;
    
    
     private void Form1_MouseDown(object sender, MouseEventArgs e)
     {
         if (e.Button == MouseButtons.Left)
         {
             beginMove = true;
             currentXPosition = MousePosition.X;
             currentYPosition = MousePosition.Y;
         }
     }
    
      private void Form1_MouseMove(object sender, MouseEventArgs e)
      {
          if (beginMove)
          {
              this.Left += MousePosition.X - currentXPosition;
              this.Top += MousePosition.Y - currentYPosition;
              currentXPosition = MousePosition.X;
              currentYPosition = MousePosition.Y;
          }
      }
    
      private void Form1_MouseUp(object sender, MouseEventArgs e)
      {
          if (e.Button == MouseButtons.Left)
          {
              currentXPosition = 0; 
              currentYPosition = 0;
              beginMove = false;
          }
      }
    }
    

    设置窗口背景图片

    注意有一点就是 .net framework 的窗体程序添加的背景图片会很模糊,但 .net core 的窗体程序不会。后来发现是因为 win10 默认会放大 125% (在显示设置里),导致这个图片被拉伸,拉伸后就变得模糊了,但是 framework 应该是没有对这个做优化,所以在设置里把 125% 改成 100% 也能解决问题。

    (1)双击 Resources.resx ,添加一个图片资源:
    在这里插入图片描述
    (2)在 Load 函数里添加代码,使背景图片自适应窗体大小

     private void Form1_Load(object sender, EventArgs e)
     {
          this.BackgroundImageLayout = ImageLayout.Stretch;
     }
    

    透明 TextBox 控件

    (1)创建一个类(在当前项目中就可以,不是新创建一个控件类库哦!),取名为 textbox_lucency,代码如下:

    // 需要引用如下头文件
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    
    class textbox_lucency:TextBox
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr LoadLibrary(string lpFileName);
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams prams = base.CreateParams;
                if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
                {
                    prams.ExStyle |= 0x020; 
                    prams.ClassName = "RICHEDIT50W";
                }
                return prams;
            }
        }
    }
    

    (2)从工具箱内拉一个正常的 textbox 出来,并在 Form1.Designer.cs 里修改这个控件对应的类名:
    在这里插入图片描述
    在这里插入图片描述
    (3)控件设置成无边框
    在这里插入图片描述

    (4)运行程序,如图已经实现了透明效果
    在这里插入图片描述


    按钮背景图片

    (1)添加背景图,并设置自动平铺
    在这里插入图片描述

    (2)其他相关属性
    在这里插入图片描述

    (3)效果如下,至于悬停点击等事件的背景切换,需要另外处理
    在这里插入图片描述

  • 相关阅读:
    什么是API
    理解RESTful架构
    SDN的深入思考(1):SDN的核心本质到底是什么?
    SDN-数据控制分离
    浅析html+css+javascript之间的关系与作用
    python调用win32接口进行截图
    解决tensorflow问题:Your CPU supports instructions that this TensorFlow binary was not compiled to use:
    去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
    Anaconda清华大学开源镜像
    python控制windows剪贴板,向剪贴板中写入图片
  • 原文地址:https://www.cnblogs.com/csnd/p/15613324.html
Copyright © 2011-2022 走看看