通过下面代码在构造函数中调用方法 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); }
这边这给出一个写好的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 } }
效果图:
模拟API自绘阴影源码下载 如上图