原文:WPF Aero Glass Window

  1. 用法

    1. Win7 DwmSetWindowAttribute function
    2. Win10 SetWindowCompositionAttribute
  2. 代码
    1.   1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Runtime.InteropServices;
      5 using System.Text;
      6 using System.Threading.Tasks;
      7 using System.Windows;
      8 using System.Windows.Interop;
      9
      10 namespace AeroWindow
      11 {
      12 internal static class NativeMethods
      13 {
      14 [DllImport("user32.dll")]
      15 internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttribData data);
      16
      17 [StructLayout(LayoutKind.Sequential)]
      18 internal struct WindowCompositionAttribData
      19 {
      20 public WindowCompositionAttribute Attribute;
      21 public IntPtr Data;
      22 public int SizeOfData;
      23 }
      24
      25 [StructLayout(LayoutKind.Sequential)]
      26 internal struct AccentPolicy
      27 {
      28 public AccentState AccentState;
      29 public AccentFlags AccentFlags;
      30 public int GradientColor;
      31 public int AnimationId;
      32 }
      33
      34 [Flags]
      35 internal enum AccentFlags
      36 {
      37 // ...
      38 DrawLeftBorder = 0x20,
      39 DrawTopBorder = 0x40,
      40 DrawRightBorder = 0x80,
      41 DrawBottomBorder = 0x100,
      42 DrawAllBorders = (DrawLeftBorder | DrawTopBorder | DrawRightBorder | DrawBottomBorder)
      43 // ...
      44 }
      45
      46 internal enum WindowCompositionAttribute
      47 {
      48 // ...
      49 WCA_ACCENT_POLICY = 19
      50 // ...
      51 }
      52
      53 internal enum AccentState
      54 {
      55 ACCENT_DISABLED = 0,
      56 ACCENT_ENABLE_GRADIENT = 1,
      57 ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
      58 ACCENT_ENABLE_BLURBEHIND = 3,
      59 ACCENT_INVALID_STATE = 4
      60 }
      61
      62 public static void EnableBlur(this Window window)
      63 {
      64 if (SystemParameters.HighContrast)
      65 {
      66 return; // Blur is not useful in high contrast mode
      67 }
      68 SetAccentPolicy(window, NativeMethods.AccentState.ACCENT_ENABLE_BLURBEHIND);
      69 }
      70
      71
      72 public static void DisableBlur(this Window window)
      73 {
      74 SetAccentPolicy(window, NativeMethods.AccentState.ACCENT_DISABLED);
      75 }
      76
      77 private static void SetAccentPolicy(Window window, NativeMethods.AccentState accentState)
      78 {
      79 var windowHelper = new WindowInteropHelper(window);
      80 var accent = new NativeMethods.AccentPolicy
      81 {
      82 AccentState = accentState,
      83 AccentFlags = GetAccentFlagsForTaskbarPosition(),
      84 AnimationId = 2
      85 };
      86 var accentStructSize = Marshal.SizeOf(accent);
      87 var accentPtr = Marshal.AllocHGlobal(accentStructSize);
      88 Marshal.StructureToPtr(accent, accentPtr, false);
      89 var data = new NativeMethods.WindowCompositionAttribData
      90 {
      91 Attribute = NativeMethods.WindowCompositionAttribute.WCA_ACCENT_POLICY,
      92 SizeOfData = accentStructSize,
      93 Data = accentPtr
      94 };
      95 NativeMethods.SetWindowCompositionAttribute(windowHelper.Handle, ref data);
      96 Marshal.FreeHGlobal(accentPtr);
      97 }
      98
      99 private static NativeMethods.AccentFlags GetAccentFlagsForTaskbarPosition()
      100 {
      101 return NativeMethods.AccentFlags.DrawAllBorders;
      102 }
      103 }
      104 }

       1  public MainWindow()
      2 {
      3 RoutedEventHandler handler = null;
      4 handler = (s, e) =>
      5 {
      6 Loaded -= handler;
      7 this.EnableBlur();
      8 };
      9 Loaded += handler;
      10
      11 InitializeComponent();
      12 }
       1 <Window x:Class="AeroWindow.MainWindow"
      2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      6 xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell"
      7 xmlns:local="clr-namespace:AeroWindow"
      8 mc:Ignorable="d"
      9 Background="#44E6ECF0"
      10 Title="MainWindow" Height="600" Width="800" >
      11 <shell:WindowChrome.WindowChrome>
      12 <shell:WindowChrome GlassFrameThickness="1" UseAeroCaptionButtons="False" NonClientFrameEdges="None" CornerRadius="10" CaptionHeight="600" />
      13 </shell:WindowChrome.WindowChrome>
      14 <Grid/>
      15 </Window>
  3. 效果

  

WPF Aero Glass Window的更多相关文章

  1. Windows 7 扩展玻璃效果(Aero Glass)

    转自:http://www.cnblogs.com/gnielee/archive/2010/10/04/windows7-extend-aero-glass.html Windows 7 操作系统默 ...

  2. 【转】MFC 迅雷七窗体特效,使用DWM实现Aero Glass效果

    从Windows Vista开始,Aero Glass效果被应用在了Home Premium以上的系统中(Home Basic不具有该效果).这种效果是由DWM(Desktop Window Mana ...

  3. 窗口玻璃特效,半透明窗口,使用DWM实现Aero Glass效果

    转自:http://blog.csdn.net/ntwilford/article/details/5656633 从Windows Vista开始,Aero Glass效果被应用在了Home Pre ...

  4. C# WPF 多个window 相互覆盖的次序控制 不用topmost

    原文:C# WPF 多个window 相互覆盖的次序控制 不用topmost   WindowInteropHelper mianHanel = new WindowInteropHelper(Mai ...

  5. WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。

    原文:WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆. 最近总是收到一个异常 "System.Inva ...

  6. WPF 不要给 Window 类设置变换矩阵(应用篇)

    原文:WPF 不要给 Window 类设置变换矩阵(应用篇) WPF 的 Window 类是不允许设置变换矩阵的.不过,总会有小伙伴为了能够设置一下试图绕过一些验证机制. 不要试图绕过,因为你会遇到更 ...

  7. WPF直接用Window.Close直接关闭窗口导致不能完全退出的问题

    前几天我在CSDN扔了一个问题,基本描述一下:写了一段这样的代码,来实现获取Control的template,却发现一个这样的问题,就是当我打开了一个window以后,手动调用Close(),窗口的确 ...

  8. WPF 中保存 window(窗口)或者canvas成图片

    最近需要用到这个功能,搜了一下不少代码有问题 ,找到一个效果比较好的,支持多级子元素 记一下. private void button_save_window_Click(object sender, ...

  9. wpf 只在window是ShowDialog打开时才设置DialogResult

    //only set DialogResult when window is ShowDialog before if(System.Windows.Interop.ComponentDispatch ...

随机推荐

  1. 2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)

    1.数据库表名重构.    之前受PHP等程序的影响,数据库表名喜欢用数据库的名称作为前缀,比如"p2p_account".    在经过大量的实践之后,发现Java程序中,基本没 ...

  2. JSP的C标签遍历Map数据

    JSP的C标签遍历Map数据 Map可以实现较为丰富的数据封装. 第一种: 控制器传递到页面的map格式如下: Map<String, User> dataMap = new HashMa ...

  3. 常见数据结构与算法的 Python 实现

    1. 排序 快速排序(quick sort) 形式一:借助 partition 辅助函数 def partition(seq): pivot, seq = seq[0], seq[1:] low = ...

  4. CUDA+OpenGL混合编程

    CUDA+OpenGL混合编程示例: #include <stdio.h> #include <stdlib.h> #include "GL\glew.h" ...

  5. VSCode 小鸡汤 第00期 —— 安装和入门

    简介 这将是一个新的系列,将会以 Visual Studio Code(后文都简称为 VSCode 啦)的操作,环境配置,插件介绍为主,为大家不定期的介绍 VSCode 的一些操作技巧,所以取名 VS ...

  6. 写在使用 Linux 工作一年后

    start 去年公司空了几台台式机,当时看了下似乎配置比我用的乞丐版 air 略高一些,而且除了 ssd 以外还有一个 1T 的大硬盘,加上后面可能会有一段时间不做 iOS 了,那就不需要 macOS ...

  7. ArcGIS API for Silverlight 学习笔记

    这里主要讲解展示不同的服务地图 先看一个实例: 新建一个Silverlight项目,在MainPage.xaml文件中,引入 ESRI.ArcGIS.Client 命名空间和 ESRI.ArcGIS. ...

  8. SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传

    在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期 ...

  9. python 教程 第五章、 函数

    第五章. 函数 定义语句后面要加冒号 1)    定义函数 def sayHello(): print 'Hello World!' sayHello() 2)    变量作用域 LEGB原则 L本地 ...

  10. AWS核心服务概览

    1.Amazon Web Service 应该可以说,Amazon Web Service目前是云计算领域的领头羊,其业务规模.开发水平和盈利能力在业界内都是首屈一指的.从本科毕业离开学校就一直做Ja ...