原文: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. javaScript实现简单网页倒计时代码

    <div id="button"> <input type="button" value="同意" id="b0 ...

  2. XMPP之ios即时通讯客户端开发-配置XMPP基本信息之工程代码(五)

    登录功能完成以后包含以下代码文件: AppDelegate.h AppDelegate.m LoginViewController.h LoginViewController.m LoginUser. ...

  3. 【codeforces 776C】Molly's Chemicals

    [题目链接]:http://codeforces.com/contest/776/problem/C [题意] 让你找区间[i,j] 使得sum[i..j]=k^t,这里t=0,1,2,3.. -10 ...

  4. 【23.33%】【hdu 5945】Fxx and game

    Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...

  5. cocos2d-x创建第一个项目

    #include "AppDelegate.h" #include "HelloWorldScene.h" USING_NS_CC; AppDelegate:: ...

  6. Scala基本语法学习笔记

      Scala语法与JAVA有很多相似的地方,两者也可以相互调用.但是整体感觉Scala语法等简洁.灵活.这里记录下Scala有特点的地方,以备以后查找方便.   参考: 使用 import: htt ...

  7. 【转】mybatis 一对一与一对多collection和association的使用

    转自:https://www.cnblogs.com/yansum/p/5819973.html (有修改和补充,红色字体部分)   在mybatis如何进行一对一.一对多的多表查询呢?这里用一个简单 ...

  8. Visual C# 2010 实现资源管理器

    演练:使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面 Visual Studio 2010     其他版本     此主题尚未评级 - 评价此主题   Vis ...

  9. matlab 工具函数、matlab toolbox(工具箱)

    minimize.m:最小化可微多元函数 minimize.m:最小化一个可微的多元函数: Minimize a differentiable multivariate function,函数接口说明 ...

  10. C. Adidas vs Adivon

    C. Adidas vs Adivon Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer ...