通過下面代碼在構造函數中調用方法 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自繪陰影源碼下載 如上圖