• WPF 几行代码实现窗体毛玻璃效果(Aero Glass)


    创建一个叫AeroGlass.cs 的类,代码如下:

     1 using System;
     2 using System.Runtime.InteropServices;
     3 using System.Windows;
     4 using System.Windows.Interop;
     5 using System.Windows.Media;
     6 
     7 [StructLayout(LayoutKind.Sequential)]
     8 public struct MARGINS
     9 {
    10     public MARGINS(Thickness t)
    11     {
    12         Left = (int)t.Left;
    13         Right = (int)t.Right;
    14         Top = (int)t.Top;
    15         Bottom = (int)t.Bottom;
    16     }
    17     public int Left;
    18     public int Right;
    19     public int Top;
    20     public int Bottom;
    21 }
    22 
    23 public class GlassHelper
    24 {
    25     [DllImport("dwmapi.dll", PreserveSig = false)]
    26     static extern void DwmExtendFrameIntoClientArea(
    27         IntPtr hWnd, ref MARGINS pMarInset);
    28     [DllImport("dwmapi.dll", PreserveSig = false)]
    29         static extern bool DwmIsCompositionEnabled();
    30 
    31     public static bool ExtendGlassFrame(Window window, Thickness margin)
    32     {
    33         if (!DwmIsCompositionEnabled())
    34             return false;
    35 
    36         IntPtr hwnd = new WindowInteropHelper(window).Handle;
    37         if (hwnd == IntPtr.Zero)
    38             throw new InvalidOperationException(
    39             "The Window must be shown before extending glass.");
    40 
    41         // Set the background to transparent from both the WPF and Win32 perspectives
    42         window.Background = Brushes.Transparent;
    43         HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
    44 
    45         MARGINS margins = new MARGINS(margin);
    46         DwmExtendFrameIntoClientArea(hwnd, ref margins);
    47         return true;
    48     }
    49 }

    把这段代码加到主窗体就可以了!

    1 protected override void OnSourceInitialized(EventArgs e)
    2         {
    3             base.OnSourceInitialized(e);
    4             GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
    5         }
  • 相关阅读:
    dom event 笔记
    提交安钮 提交一次加了 59秒倒计时
    时间倒计时
    把表单数据封装成json格式 插件可用
    dbgrid显示access备注信息
    stringgird中使用TClientDataSet排序的问题
    【单位矩阵】【杭电OJ1575】
    【矩阵快速幂】【杭电OJ1757】
    【关键路径】【拓扑排序+逆拓扑排序】【转】
    【拓扑排序】【关键路径】
  • 原文地址:https://www.cnblogs.com/lyghost/p/2652789.html
Copyright © 2020-2023  润新知