日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# WinForm窗体四周阴影效果

發布時間:2025/3/11 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# WinForm窗体四周阴影效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、起因

關于winform窗體無邊框的問題很簡單,只需要設置winform的窗體屬性即可:

FormBorderStyle = FormBorderStyle.None;

但是這中無邊框窗口實現的效果和背景完全沒有層次的感覺,所以能加上陰影,突出窗口顯示的感覺。

二、網上搜索的解決方案

方法 1

首先,發現了使用 user32.dll 中方法實現的方案:
C# WinForm無邊框窗體設置陰影效果

缺點:這種方法只能實現右邊和下邊的陰影效果,效果不是很好。

效果如圖:

方法 2

然后發現了使用雙層窗體,底層窗體貼陰影的PNG來實現的方式:
教你實現Winform窗體的四邊陰影效果

缺點:PNG格式特點是,支持alpha通道半透明,但是放大會失真

效果如圖:

三、最終解決方案

我使用的方法是繪制陰影到bitmap上,然后使用雙層窗體的原理把bitmap繪制到背景層上去。

其中比較重要的是:

1、繪制圓角矩形

public static void DrawRoundRectangle(Graphics g, Pen pen, Rectangle rect, int cornerRadius) {using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius)){g.DrawPath(pen, path);} } public static void FillRoundRectangle(Graphics g, Brush brush, Rectangle rect, int cornerRadius) {using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius)){g.FillPath(brush, path);} } internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius) {GraphicsPath roundedRect = new GraphicsPath();roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);roundedRect.CloseFigure();return roundedRect; }

2、繪制陰影

internal void DrawShadow() {Bitmap bitmap = null;Graphics g = null;try{bitmap = new Bitmap(Width, Height);g = Graphics.FromImage(bitmap);g.SmoothingMode = SmoothingMode.AntiAlias;Color c = Color.FromArgb(0, 0, 0, 0);Pen p = new Pen(c, 3);for (int i = 0; i < Main.ShadowWidth; i++){p.Color = Color.FromArgb((255 / 10 / Main.ShadowWidth) * i, c);DrawRoundRectangle(g, p, new Rectangle(i, i, Width - (2 * i) - 1, Height - (2 * i) - 1), Main.ShadowWidth - i);}SetBits(bitmap);}catch { }finally{g?.Dispose();bitmap?.Dispose();} }

3、繪制半透明bitmap到窗口上

protected override CreateParams CreateParams {get{CreateParams cParms = base.CreateParams;cParms.ExStyle |= 0x00080000; // WS_EX_LAYEREDreturn cParms;} } public void SetBits(Bitmap bitmap) {if (!Image.IsCanonicalPixelFormat(bitmap.PixelFormat) || !Image.IsAlphaPixelFormat(bitmap.PixelFormat))throw new ApplicationException("圖片必須是32位帶Alhpa通道的圖片。");IntPtr oldBits = IntPtr.Zero;IntPtr screenDC = FormStyleAPI.GetDC(IntPtr.Zero);IntPtr hBitmap = IntPtr.Zero;IntPtr memDc = FormStyleAPI.CreateCompatibleDC(screenDC);try{FormStyleAPI.Point topLoc = new FormStyleAPI.Point(Left, Top);FormStyleAPI.Size bitMapSize = new FormStyleAPI.Size(Width, Height);FormStyleAPI.BLENDFUNCTION blendFunc = new FormStyleAPI.BLENDFUNCTION();FormStyleAPI.Point srcLoc = new FormStyleAPI.Point(0, 0);hBitmap = bitmap.GetHbitmap(Color.FromArgb(0));oldBits = FormStyleAPI.SelectObject(memDc, hBitmap);blendFunc.BlendOp = FormStyleAPI.AC_SRC_OVER;blendFunc.SourceConstantAlpha = Byte.Parse(((int)(Main.Opacity * 255)).ToString());blendFunc.AlphaFormat = FormStyleAPI.AC_SRC_ALPHA;blendFunc.BlendFlags = 0;FormStyleAPI.UpdateLayeredWindow(Handle, screenDC, ref topLoc, ref bitMapSize, memDc, ref srcLoc, 0, ref blendFunc, FormStyleAPI.ULW_ALPHA);}finally{if (hBitmap != IntPtr.Zero){FormStyleAPI.SelectObject(memDc, oldBits);FormStyleAPI.DeleteObject(hBitmap);}FormStyleAPI.ReleaseDC(IntPtr.Zero, screenDC);FormStyleAPI.DeleteDC(memDc);} }

四、最終方案的效果和源碼

源碼下載

總結

以上是生活随笔為你收集整理的C# WinForm窗体四周阴影效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最近中文字幕免费mv视频7 | xx性欧美肥妇精品久久久久久 | 亚洲福利网址 | av网站免费大全 | 欧洲精品视频在线 | 男女操操操 | 色优久久 | 伊人av网| 亚洲欧美日韩精品永久在线 | 96精品视频 | 成年人网站黄色 | 亚洲五月婷 | 18男女无套免费视频 | 中国黄色1级片 | 艳妇乳肉豪妇荡乳av | 黄色视屏网站 | 不卡成人 | 亚洲激情偷拍 | 成人在线免费高清视频 | 黄色免费看视频 | 国产喷水吹潮视频www | 精品www| 国产在线一卡二卡 | 一级黄色片欧美 | 凹凸av在线 | 日批视频免费播放 | 麻豆视频黄色 | 日韩一级影片 | 天堂无乱码| 三级中文字幕在线 | 疯狂撞击丝袜人妻 | 波多野结衣有码 | 色吧在线视频 | 久久免费黄色 | 中文字幕精品一区二区精品 | 精品一区亚洲 | 啪免费视频| 国产成年人网站 | 国产欧美精品在线观看 | 欧美精品动漫 | 国产99久久久久久免费看 | 高潮毛片无遮挡 | 免费av大片 | 日韩欧美成人免费视频 | 婷婷色亚洲 | 荫蒂被男人添免费视频 | 亲嘴脱内衣内裤 | 国产日批视频 | 国产精选一区二区 | 麻豆精品在线 | 日本激情视频在线观看 | 精品熟妇视频一区二区三区 | 毛利兰被扒开腿做同人漫画 | 日韩精品一区中文字幕 | 向着小小的花蕾绽放 | 久久婷婷国产 | 日日色综合 | 国内av网站| 韩日av在线播放 | 精品在线你懂的 | 成人午夜网站 | 超碰99在线 | 成人免费黄色片 | 一区二区有码 | 爱啪啪av| 欧美成人精品一区 | 色性网站 | 欧美一级片a | 丁香花高清在线观看完整动漫 | 91视频看| 特黄特色免费视频 | 欧美精品一区二区三区久久 | 欧美乱轮 | 51人人看| 天天干,天天干 | 粉嫩av| 窝窝视频在线 | 精品日韩一区二区三区 | 国产福利小视频在线 | 日本一本高清 | 学生调教贱奴丨vk | 亚洲综合在 | 婷婷一区二区三区四区 | 国产91白丝在一线播放 | 国产成人av一区二区三区在线观看 | 综合久久精品 | 性高潮影院 | 久久99热久久99精品 | 亚洲欧美综合在线观看 | 18成人在线| 国产熟女高潮一区二区三区 | 日日夜夜撸撸 | 吞精囗交69激情欧美 | 热九九精品 | 日本少妇bb | 成人免费高清视频 | 青青草原综合网 | 三级艳丽杨钰莹三级 | 少妇精品视频 |