WPF Aero Glass Window
用法
- Win7 DwmSetWindowAttribute function
- Win10 SetWindowCompositionAttribute
- 代码
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>
- 效果

WPF Aero Glass Window的更多相关文章
- Windows 7 扩展玻璃效果(Aero Glass)
转自:http://www.cnblogs.com/gnielee/archive/2010/10/04/windows7-extend-aero-glass.html Windows 7 操作系统默 ...
- 【转】MFC 迅雷七窗体特效,使用DWM实现Aero Glass效果
从Windows Vista开始,Aero Glass效果被应用在了Home Premium以上的系统中(Home Basic不具有该效果).这种效果是由DWM(Desktop Window Mana ...
- 窗口玻璃特效,半透明窗口,使用DWM实现Aero Glass效果
转自:http://blog.csdn.net/ntwilford/article/details/5656633 从Windows Vista开始,Aero Glass效果被应用在了Home Pre ...
- C# WPF 多个window 相互覆盖的次序控制 不用topmost
原文:C# WPF 多个window 相互覆盖的次序控制 不用topmost WindowInteropHelper mianHanel = new WindowInteropHelper(Mai ...
- WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。
原文:WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆. 最近总是收到一个异常 "System.Inva ...
- WPF 不要给 Window 类设置变换矩阵(应用篇)
原文:WPF 不要给 Window 类设置变换矩阵(应用篇) WPF 的 Window 类是不允许设置变换矩阵的.不过,总会有小伙伴为了能够设置一下试图绕过一些验证机制. 不要试图绕过,因为你会遇到更 ...
- WPF直接用Window.Close直接关闭窗口导致不能完全退出的问题
前几天我在CSDN扔了一个问题,基本描述一下:写了一段这样的代码,来实现获取Control的template,却发现一个这样的问题,就是当我打开了一个window以后,手动调用Close(),窗口的确 ...
- WPF 中保存 window(窗口)或者canvas成图片
最近需要用到这个功能,搜了一下不少代码有问题 ,找到一个效果比较好的,支持多级子元素 记一下. private void button_save_window_Click(object sender, ...
- wpf 只在window是ShowDialog打开时才设置DialogResult
//only set DialogResult when window is ShowDialog before if(System.Windows.Interop.ComponentDispatch ...
随机推荐
- 2015年创业中遇到的技术问题:1-10(乱码-SpringMVC-jquery-JSON等)
1.数据库表名重构. 之前受PHP等程序的影响,数据库表名喜欢用数据库的名称作为前缀,比如"p2p_account". 在经过大量的实践之后,发现Java程序中,基本没 ...
- JSP的C标签遍历Map数据
JSP的C标签遍历Map数据 Map可以实现较为丰富的数据封装. 第一种: 控制器传递到页面的map格式如下: Map<String, User> dataMap = new HashMa ...
- 常见数据结构与算法的 Python 实现
1. 排序 快速排序(quick sort) 形式一:借助 partition 辅助函数 def partition(seq): pivot, seq = seq[0], seq[1:] low = ...
- CUDA+OpenGL混合编程
CUDA+OpenGL混合编程示例: #include <stdio.h> #include <stdlib.h> #include "GL\glew.h" ...
- VSCode 小鸡汤 第00期 —— 安装和入门
简介 这将是一个新的系列,将会以 Visual Studio Code(后文都简称为 VSCode 啦)的操作,环境配置,插件介绍为主,为大家不定期的介绍 VSCode 的一些操作技巧,所以取名 VS ...
- 写在使用 Linux 工作一年后
start 去年公司空了几台台式机,当时看了下似乎配置比我用的乞丐版 air 略高一些,而且除了 ssd 以外还有一个 1T 的大硬盘,加上后面可能会有一段时间不做 iOS 了,那就不需要 macOS ...
- ArcGIS API for Silverlight 学习笔记
这里主要讲解展示不同的服务地图 先看一个实例: 新建一个Silverlight项目,在MainPage.xaml文件中,引入 ESRI.ArcGIS.Client 命名空间和 ESRI.ArcGIS. ...
- SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传
在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期 ...
- python 教程 第五章、 函数
第五章. 函数 定义语句后面要加冒号 1) 定义函数 def sayHello(): print 'Hello World!' sayHello() 2) 变量作用域 LEGB原则 L本地 ...
- AWS核心服务概览
1.Amazon Web Service 应该可以说,Amazon Web Service目前是云计算领域的领头羊,其业务规模.开发水平和盈利能力在业界内都是首屈一指的.从本科毕业离开学校就一直做Ja ...