Advertisement

WinForm 圆角窗体与四边阴影效果

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文介绍了如何在Windows Forms应用程序中实现圆角窗口和边缘阴影效果的技术细节与步骤,旨在提升界面美观度。 public void SetBits() { // 绘制绘图层背景 Bitmap bitmap = new Bitmap(Main.Width + 10, Main.Height + 10); Rectangle _BacklightLTRB = new Rectangle(20, 20, 20, 20); // 窗体光泽重绘边界 Graphics g = Graphics.FromImage(bitmap); g.SmoothingMode = SmoothingMode.HighQuality; // 高质量 g.PixelOffsetMode = PixelOffsetMode.HighQuality; // 高像素偏移质量 ImageDrawRect.DrawRect(g, Properties.Resources.main_light_bkg_top123, ClientRectangle, Rectangle.FromLTRB(_BacklightLTRB.X, _BacklightLTRB.Y, _BacklightLTRB.Width + 20, _BacklightLTRB.Height), 1, 1); // 注意这里的宽度调整为原始值加20 if (!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat) || !Bitmap.IsAlphaPixelFormat(bitmap.PixelFormat)) { throw new ApplicationException(图片必须是32位带Alhpa通道的图片。); } IntPtr oldBits = IntPtr.Zero; IntPtr screenDC = Win32.GetDC(IntPtr.Zero); IntPtr hBitmap = IntPtr.Zero; IntPtr memDc = Win32.CreateCompatibleDC(screenDC); try { Win32.Point topLoc = new Win32.Point(Left, Top); Win32.Size bitMapSize = new Win32.Size(Width, Height); // 设置透明度和混合功能 Win32.BLENDFUNCTION blendFunc = new Win32.BLENDFUNCTION(); blendFunc.BlendOp = Win32.AC_SRC_OVER; blendFunc.SourceConstantAlpha = Byte.Parse(255); blendFunc.AlphaFormat = Win32.AC_SRC_ALPHA; blendFunc.BlendFlags = 0; hBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); oldBits = Win32.SelectObject(memDc, hBitmap); // 更新窗口图层 Win32.UpdateLayeredWindow(Handle, screenDC, ref topLoc, ref bitMapSize, memDc, new Win32.Point(), 0, ref blendFunc, Win32.ULW_ALPHA); } finally { if (hBitmap != IntPtr.Zero) { Win32.SelectObject(memDc, oldBits); Win32.DeleteObject(hBitmap); } // 清理资源 Win32.ReleaseDC(IntPtr.Zero, screenDC); Win32.DeleteDC(memDc); } }

全部评论 (0)

还没有任何评论哟~
客服
客服
  • WinForm
    优质
    本文介绍了如何在Windows Forms应用程序中实现圆角窗口和边缘阴影效果的技术细节与步骤,旨在提升界面美观度。 public void SetBits() { // 绘制绘图层背景 Bitmap bitmap = new Bitmap(Main.Width + 10, Main.Height + 10); Rectangle _BacklightLTRB = new Rectangle(20, 20, 20, 20); // 窗体光泽重绘边界 Graphics g = Graphics.FromImage(bitmap); g.SmoothingMode = SmoothingMode.HighQuality; // 高质量 g.PixelOffsetMode = PixelOffsetMode.HighQuality; // 高像素偏移质量 ImageDrawRect.DrawRect(g, Properties.Resources.main_light_bkg_top123, ClientRectangle, Rectangle.FromLTRB(_BacklightLTRB.X, _BacklightLTRB.Y, _BacklightLTRB.Width + 20, _BacklightLTRB.Height), 1, 1); // 注意这里的宽度调整为原始值加20 if (!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat) || !Bitmap.IsAlphaPixelFormat(bitmap.PixelFormat)) { throw new ApplicationException(图片必须是32位带Alhpa通道的图片。); } IntPtr oldBits = IntPtr.Zero; IntPtr screenDC = Win32.GetDC(IntPtr.Zero); IntPtr hBitmap = IntPtr.Zero; IntPtr memDc = Win32.CreateCompatibleDC(screenDC); try { Win32.Point topLoc = new Win32.Point(Left, Top); Win32.Size bitMapSize = new Win32.Size(Width, Height); // 设置透明度和混合功能 Win32.BLENDFUNCTION blendFunc = new Win32.BLENDFUNCTION(); blendFunc.BlendOp = Win32.AC_SRC_OVER; blendFunc.SourceConstantAlpha = Byte.Parse(255); blendFunc.AlphaFormat = Win32.AC_SRC_ALPHA; blendFunc.BlendFlags = 0; hBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); oldBits = Win32.SelectObject(memDc, hBitmap); // 更新窗口图层 Win32.UpdateLayeredWindow(Handle, screenDC, ref topLoc, ref bitMapSize, memDc, new Win32.Point(), 0, ref blendFunc, Win32.ULW_ALPHA); } finally { if (hBitmap != IntPtr.Zero) { Win32.SelectObject(memDc, oldBits); Win32.DeleteObject(hBitmap); } // 清理资源 Win32.ReleaseDC(IntPtr.Zero, screenDC); Win32.DeleteDC(memDc); } }
  • C#源码:无 WinForm,包括及淡入淡出
    优质
    本教程提供了一个使用C#编写的WinForms项目示例代码,展示如何实现无边框窗体特效,包括顶部阴影、圆角以及淡入淡出动画。 本段落将深入探讨如何使用C#编程语言在Windows Forms(Winform)环境中创建一个具有无边框、四边阴影、圆角以及淡入淡出特效的窗体。这是一段涉及用户界面设计和动画效果的高级C#技术实践。 首先从无边框窗体开始,在C# WinForm应用中,通常通过设置`FormBorderStyle`属性为`None`来实现无边框窗体。这样可以去掉默认边框和标题栏,提供更自由的设计空间: ```csharp this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; ``` 接下来要实现四边阴影效果,则需要自定义控件或使用第三方库。一种方法是利用GDI+图形接口来绘制阴影,在窗体的`Paint`事件处理程序中,可以使用`Graphics`对象绘制阴影。 ```csharp protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); using (SolidBrush brush = new SolidBrush(Color.FromArgb(128, 0, 0, 0))) { e.Graphics.FillRectangle(brush, this.ClientRectangle.Inflate(-5, -5)); } } ``` 对于圆角效果,可以使用`Region`属性指定窗体形状。通过创建一个带有圆角的矩形路径并将其设置为窗体区域来实现。 ```csharp private void Form1_Load(object sender, EventArgs e) { GraphicsPath path = new GraphicsPath(); path.AddRoundRect(this.ClientRectangle, 10, 10); // 圆角半径设为10 this.Region = new Region(path); } ``` 淡入淡出效果是通过调整窗体透明度实现的,这需要使用`Timer`组件,并在`Tick`事件中逐步改变窗体的Opacity属性。为了使效果平滑,每次只增加一小部分透明度。 ```csharp private Timer fadeInTimer; private double opacity = 0.0; public Form1() { InitializeComponent(); fadeInTimer = new Timer(); fadeInTimer.Interval = 50; // 每隔50毫秒调整一次 fadeInTimer.Tick += FadeIn_Tick; } private void FadeIn_Tick(object sender, EventArgs e) { if (opacity < 1.0) { opacity += 0.05; this.Opacity = opacity; } else { fadeInTimer.Stop(); } } private void Form1_Shown(object sender, EventArgs e) { fadeInTimer.Start(); } ``` 创建这样一个C# Winform窗体需要掌握无边框设置、自定义绘图、图形路径和区域设定,以及计时器与透明度控制等技术。这些可以让你的Winform应用拥有更美观且动态化的用户界面。通过不断学习实践,还可以进一步优化效果如添加鼠标拖动移动窗口功能或实现复杂动画效果。
  • C# WinForm
    优质
    本教程介绍如何在C# WinForm应用程序中添加窗体边缘阴影效果,提升界面美观度和用户体验。 在Winform取消默认边框的情况下,实现窗体四周带阴影的效果。通过使用双层窗体来完成这一功能:上层是普通的控件窗体,而底部则是绘制的窗体阴影。
  • C# WinForm代码分享:无及淡入淡出
    优质
    本篇文章将详细介绍如何在C# WinForm中实现一些酷炫的效果,包括制作无边框窗口时添加阴影效果、使窗口呈现圆角以及实现淡入淡出的动画。适合希望提升界面设计感的开发者参考学习。 网上大多数无边框窗体阴影的实现方法仅限于右边和底部有阴影效果。而本代码不仅实现了四边阴影,并且包括了圆角、淡入淡出等特效,使用非常方便,只需引用类库并将需要特效的窗口继承自SkinMain即可。
  • C# GDI 矩形
    优质
    本教程详细介绍如何使用C#和GDI技术创建圆角矩形以及添加阴影效果,为用户提供丰富的图形界面开发技巧。 C# GDI 阴影 圆角矩形 源代码 可用VS打开。
  • 给VB添加
    优质
    本文介绍如何在Visual Basic应用程序中为窗体添加优雅的阴影效果,提升界面美观度和用户体验。 为VB窗体增加阴影效果,并支持显示渐变功能。
  • VB实现
    优质
    本文详细介绍了如何在Visual Basic编程环境中为应用程序窗口添加动态阴影效果的方法和步骤。通过本教程,开发者可以轻松提升应用界面的专业性和用户体验。 如何为VB窗体添加阴影效果?关于这个问题,可以探讨一下实现方法和技术细节。在Visual Basic应用程序开发过程中,给窗口增加阴影可以使界面更加美观且用户体验更佳。这里主要讨论的是利用代码或第三方控件来达成这一目标的方式和步骤。 一种常见的做法是使用Windows API函数CreateRoundRectRgn()以及SetWindowRegion()等来创建自定义的非矩形区域,并结合DrawThemeBackground或者GDI+绘制技术实现阴影效果;另一种方式则是寻找社区内分享的相关代码库或控件,它们已经封装好了复杂的操作步骤,开发者可以直接引用和调用。 无论采取哪种途径,都需要对Windows API有一定的了解。在实践中可以根据项目的具体需求选择最合适的解决方案。
  • Qt5 实现口的实践
    优质
    本文章介绍了使用 Qt5 框架实现具有圆角和阴影效果的现代化窗口界面的方法和技术细节。适合开发者参考学习。 根据一篇关于在Qt5中实现圆角和阴影窗口的博文进行了实践尝试。实践中发现有用的内容就采纳使用,无用则放弃。由于资源限制无法给予积分奖励,请见谅。
  • 优质
    窗口阴影效果是一种增强用户界面视觉体验的技术,通过为应用程序窗口添加柔和的阴影边框,使其外观更加立体和现代。这种设计元素不仅美观,还能提高操作系统的整体用户体验。 这段代码不错,可以自由调整色深、宽度和颜色。
  • 优质
    本教程详细讲解如何在Windows操作系统中为应用程序添加和调整窗口阴影效果,使界面更加美观现代。适合初级用户学习实践。 ### 窗体阴影效果实现方法 在Windows应用程序开发中,特别是使用WinForms框架时,为窗体添加视觉效果能够显著提升用户体验。本段落将详细介绍如何通过调用Windows API来为WinForms应用程序中的窗体实现阴影效果。 #### 一、背景与目标 在现代操作系统中,诸如Windows Vista及更高版本的操作系统提供了丰富的视觉效果,如透明度和阴影等。这些特性不仅提升了用户界面的美观度,还增强了应用程序的交互性。对于WinForms应用而言,虽然.NET Framework本身并未直接提供这些功能,但开发者可以通过调用Windows API来实现类似的效果。 #### 二、实现原理 实现窗体阴影效果的核心在于利用Windows Aero界面提供的DWM(Desktop Window Manager)服务。DWM允许开发者通过特定API调用来修改窗口的外观属性,包括阴影效果。以下是一些关键步骤和技术要点: 1. **检测当前系统是否支持Aero**:首先需要检查当前运行的操作系统的版本以及是否启用了Aero主题。 2. **使用DWM API**:如果系统支持Aero,则可以通过调用DWM相关的API来设置阴影效果。 3. **处理非Aero环境**:如果不支持Aero,则需要采用其他方式(例如GDI+)来模拟阴影效果。 #### 三、关键技术点详解 ##### 1. 检测Aero支持 ```csharp private bool CheckAeroEnabled() { if (Environment.OSVersion.Version.Major >= 6) // Windows Vista及以上版本 { int enabled = 0; DwmIsCompositionEnabled(ref enabled); return (enabled == 1) ? true : false; } return false; } ``` 这段代码通过`Environment.OSVersion`获取操作系统版本,并使用`DwmIsCompositionEnabled`函数检查是否启用了Aero效果。 ##### 2. 设置阴影效果 当确定了当前系统支持Aero后,可以通过调用`DwmExtendFrameIntoClientArea`和`DwmSetWindowAttribute`来实现阴影效果。 ```csharp protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_NCPAINT: // 箱形阴影 if (m_aeroEnabled) { var v = 2; DwmSetWindowAttribute(this.Handle, 2, ref v, 4); MARGINS margins = new MARGINS() { bottomHeight = 1, leftWidth = 1, rightWidth = 1, topHeight = 1 }; DwmExtendFrameIntoClientArea(this.Handle, ref margins); } break; default: break; } base.WndProc(ref m); if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT) // 拖动窗体 m.Result = (IntPtr)HTCAPTION; } ``` 这里的关键是`DwmSetWindowAttribute`和`DwmExtendFrameIntoClientArea`两个函数的调用。其中,`DwmSetWindowAttribute`用于设置窗口属性,而`DwmExtendFrameIntoClientArea`则扩展了窗口的非客户端区域到客户区,从而实现了阴影效果。 ##### 3. 处理非Aero环境 当系统不支持Aero时,可以使用GDI+来模拟阴影效果。 ```csharp [DllImport(gdi32.dll, EntryPoint = CreateRoundRectRgn)] private static extern IntPtr CreateRoundRectRgn( int nLeftRect, // x-coordinate of upper-left corner int nTopRect, // y-coordinate of upper-left corner int nRightRect, // x-coordinate of lower-right corner int nBottomRect, // y-coordinate of lower-right corner int nWidthEllipse, // height of ellipse int nHeightEllipse); // width of ellipse ``` 通过创建圆角矩形区域来模拟阴影效果。需要注意的是,在非Aero环境下,通常还需要设置窗体的`ClassStyle`属性以启用阴影效果。 #### 四、总结 通过上述方法,我们可以在WinForms应用程序中为窗体实现阴影效果,不仅提升了应用的视觉美感,也增强了用户体验。同时,这种方法兼容了不同版本的Windows操作系统,具有良好的适应性和可移植性。