• 作者:SuperPaxxs扶摇直上九万里,绝云气,负青天,不知图哪了,正在努力搜索中..
    • 请在Chrome、Firefox等现代浏览器浏览本站。 有事 点击这里 联系博主
    • 想在魔帆博客投稿? 点击这里 联系博主
    • [ 既然来了就多看两篇文章嘛,你好意思走么? ]
    • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏魔帆博客吧

C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass

Windows 7 操作系统默认具有一款玻璃效果主题(Aero Glass)。如果选择了该款主题,所有的应用程序标题栏都会处于玻璃透明效果(如下图)。这个功能是由Desktop Window Manager(DWM)服务支持的。
C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass

那我们自己怎么实现呢,其实很简单
新建一个类,这里我们给他取名为AeroGlassHelper.cs
代码如下:

using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;

[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
    public MARGINS(Thickness t)
    {
        Left = (int)t.Left;
        Right = (int)t.Right;
        Top = (int)t.Top;
        Bottom = (int)t.Bottom;
    }
    public int Left;
    public int Right;
    public int Top;
    public int Bottom;
}

public class GlassHelper
{
    [DllImport("dwmapi.dll", PreserveSig = false)]
    static extern void DwmExtendFrameIntoClientArea(
        IntPtr hWnd, ref MARGINS pMarInset);
    [DllImport("dwmapi.dll", PreserveSig = false)]
    static extern bool DwmIsCompositionEnabled();

    public static bool ExtendGlassFrame(Window window, Thickness margin)
    {
        if (!DwmIsCompositionEnabled())
            return false;

        IntPtr hwnd = new WindowInteropHelper(window).Handle;
        if (hwnd == IntPtr.Zero)
            throw new InvalidOperationException(
            "The Window must be shown before extending glass.");

        // Set the background to transparent from both the WPF and Win32 perspectives  
        window.Background = Brushes.Transparent;
        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

        MARGINS margins = new MARGINS(margin);
        DwmExtendFrameIntoClientArea(hwnd, ref margins);
        return true;
    }
}

在你需要的开启的地方添加如下代码:

 protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);
            GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
        }

大功告成,效果如下

win7:
C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass

C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass


win10:
C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass


魔帆博客 , 版权所有丨如未注明 , 均为原创丨本网站均采用BY-NC-SA协议进行授权 , 转载请注明C# 实现 WIN7毛玻璃窗口特效 Win AeroGlass
喜欢 (4)
[]
分享 (0)
Super Paxxs
关于作者:
一只初中狗,对网站建设和编程非常感兴趣。
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(7)个小伙伴在吐槽
  1. 写点汉字吧,博主外语很捉急!You should type some Chinese word!
    FOR日曜2017-08-18 15:08 回复
    • Super Paxxs
      :shock: 写点火星文吧,博主汉语很捉急!≒亇應侅説點㊋煋魰//.ら
      Super Paxxs2017-08-29 19:40 回复
  2. DWM IntoClientArea? 写点汉字吧,博主外语很捉急!You should type some Chinese word!
    Gorange2016-09-10 14:30 回复
  3. 求下载
    伍德2016-07-28 12:19 回复
  4. 如果有一天,我潇洒死去,请记得,我来过这里!
    6956430872016-07-09 16:07 回复
  5. 沙发
    Amo.lnk2016-07-06 09:58 回复
  6. 我就是随便看看!
    蒂欧娜2016-07-02 10:08 回复
×
订阅图标按钮