zoukankan      html  css  js  c++  java
  • C# 无边框窗体边框阴影效果

    通过下面代码在构造函数中调用方法 SetShadow();

    即可实现无边框窗体的阴影效果了

    需要添加命名空间 using System.Runtime.InteropServices;

            private const int CS_DropSHADOW = 0x20000;
            private const int GCL_STYLE = (-26);        
    
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int GetClassLong(IntPtr hwnd, int nIndex);    
            
            private void SetShadow()
            {
                SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); 
            }    
    View Code

    这边这给出一个写好的Form的基类,功能Form阴影和Form的移动功能。怎么用应该都知道吧...

    把自己的Form继承该BaseForm即可实现功能

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Runtime.InteropServices;
    
    namespace MQXS
    {
        public class BaseForm:Form
        {
            public BaseForm()
            {
                Initialize();
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="e"></param>
            protected override void OnMouseDown(MouseEventArgs e)
            {
                base.OnMouseDown(e);
                _IsMouseDown = true;
                _startPoint = Control.MousePosition;
                _oldLocation = this.Location;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="e"></param>
            protected override void OnMouseMove(MouseEventArgs e)
            {
                base.OnMouseMove(e);
                if (!_IsMouseDown) return;
                Point p=Control.MousePosition;
                this.Location = new Point(p.X - _startPoint.X + _oldLocation.X, p.Y - _startPoint.Y + _oldLocation.Y);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="e"></param>
            protected override void OnMouseUp(MouseEventArgs e)
            {
                base.OnMouseUp(e);
                _IsMouseDown = false;
            }
            /// <summary>
            /// 
            /// </summary>
            private void Initialize()
            {
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.StartPosition = FormStartPosition.CenterScreen;
                this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
                SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); //API函数加载,实现窗体边框阴影效果
            }
    
            private Point _oldLocation;
            private Point _startPoint;
            private bool _IsMouseDown;
    
            #region 窗体边框阴影效果变量申明
    
            private const int CS_DropSHADOW = 0x20000;
            private const int GCL_STYLE = (-26);
            //声明Win32 API
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int GetClassLong(IntPtr hwnd, int nIndex);
    
            #endregion
        }
    }
    View Code

    效果图:

    源码下载

    模拟API自绘阴影源码下载 如上图

  • 相关阅读:
    使用MacPorts配置PHP开发环境(PHP54+PHP FPM+NGINX+MYSQL55)
    freebsd make 常用命令(非原创)
    可以通过以下步骤生成一个简单的证书:
    Javascript相关的一些碎裂的记忆
    中兴EBG2100路由器固件
    一些javascript内容
    freebsd 记事之PHP环境搭建
    vue3 中使用 vite 时的报错
    Vite2.0 按需引入Element Plus
    移动端横屏
  • 原文地址:https://www.cnblogs.com/mqxs/p/3353718.html
Copyright © 2011-2022 走看看