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自绘阴影源码下载 如上图

  • 相关阅读:
    【转贴】Render to Texture(渲染到纹理)
    【转贴】EffectFramework
    真正的电脑高手
    【ZT】剑道与编程之道
    【转贴】DXUT 框架入门 2
    【转贴】DXUT 框架函数介绍
    第四章 治病法要(1)
    第一章 略说中医的学习与研究(5)
    第二章 伤寒之意义(2)
    第一章 略说中医的学习与研究(4)
  • 原文地址:https://www.cnblogs.com/mqxs/p/3353718.html
Copyright © 2011-2022 走看看