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

默认情况下,我们编写的应用程序在Windows 7 中也只有标题栏和窗口框架会具备玻璃效果,其他区域仍是不透明状态(如下图)。如果想将程序整体都改为上图IE 窗口的效果,可以使用DWM API 将玻璃区域进行扩展。

首先,从dwmapi.dll 中调取DwmExtendFrameIntoClientArea 方法。

[StructLayout(LayoutKind.Sequential)]  public struct MARGINS  {      public int cxLeftWidth;            public int cxRightWidth;           public int cyTopHeight;            public int cyBottomHeight;     };    [DllImport("DwmApi.dll")]  public static extern int DwmExtendFrameIntoClientArea(      IntPtr hwnd,      ref MARGINS pMarInset);

创建方法ExtendAeroGlass 方法,可将WPF Window窗口的Aero Glass 区域扩展。

private void ExtendAeroGlass(Window window)  {      try      {          // 为WPF程序获取窗口句柄           IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;          HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);          mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;            // 设置Margins          MARGINS margins = new MARGINS();            // 扩展Aero Glass          margins.cxLeftWidth = -1;          margins.cxRightWidth = -1;          margins.cyTopHeight = -1;          margins.cyBottomHeight = -1;            int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);          if (hr < 0)          {              MessageBox.Show("DwmExtendFrameIntoClientArea Failed");          }      }      catch (DllNotFoundException)      {          Application.Current.MainWindow.Background = Brushes.White;      }  }

简单制作一个WPF 界面。

<Window x:Class="WpfAeroGlass.MainWindow"          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"          Title="MainWindow" Height="350" Width="525">      <Grid x:Name="layout">          <Button x:Name="btn" Content="Button" Margin="191,66,202,211" />          <CheckBox x:Name="checkBox" Content="Extend AeroGlass"                    Click="CheckBox_Checked" Height="24" Width="121" />      </Grid>  </Window>  

补充CheckBox 点击事件,在其中启用ExtendAeroGlass 方法。

private void CheckBox_Checked(object sender, RoutedEventArgs e)  {      if checkBox.IsChecked.Value)      {          this.Background = Brushes.Transparent;          ExtendAeroGlass(this);      }      else      {          this.Background = Brushes.White;      }  }

演示效果

运行程序后,默认界面状态。

点击"Extend AeroGlass" 选框,界面中<Grid> 也将呈现玻璃效果。

Windows API

通过Windows API Code Pack 可以对Aero Glass 效果进行开启或关闭。在程序中加入Microsoft.WindowsAPICodePack.Shell 命名空间,调整AeroGlassCompositioinEnabled 完成开/关Aero Glass的效果。

GlassWindow.AeroGlassCompositionEnabled = checkBox.IsChecked.Value;

源代码

WpfAeroGlass.zip

转载于:https://blog.51cto.com/186067/1280594

Windows 7 扩展玻璃效果(Aero Glass)相关推荐

  1. DevExpress中透明玻璃效果

    Aero玻璃效果 下图左是DevExpress无玻璃效果,图右是Windows自带玻璃效果. Windows Aero 是从 Windows Vista 开始使用的新型用户界面,透明玻璃感让用户一眼贯 ...

  2. C#迅雷七窗体特效,使用DWM实现Aero Glass效果

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

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

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

  4. java aero_java – 结合Aero Glass效果和SWT

    作为一个宠物项目,我一直在玩将Aero Glass效果集成到我的SWT应用程序中的概念. Łukasz Milewski has an excellent blog post解释了如何实现这一点,这几 ...

  5. win7下 窗体玻璃效果的实现和WindowStyle None模式下的移动 wpf

    这些技术在上一篇文章的介绍的软件里有用到,现在单独摘出来说明一下. 添加 using System.Runtime.InteropServices; [StructLayout(LayoutKind. ...

  6. QT-磨砂玻璃效果实现

    QT-磨砂玻璃效果实现 前言 开始 前言 接触QT都挺多年了,今天开始打算把这几年攒下的QT资源记录下来,留个存档吧.今天记录的是windows下(只有win vista|win7支持)的玻璃磨砂效果 ...

  7. WPF Aero Glass Window

    WPF Aero Glass Window 原文:WPF Aero Glass Window 用法 Win7 DwmSetWindowAttribute function Win10 SetWindo ...

  8. 计算机的aero界面是一种,Win8桌面UI大变脸 去除Aero Glass等特效

    在Windows 8话题中,谈论最多的莫过于其Metro用户界面和触摸操作为重点的设计,很多人认为微软这一步跨地太大了.今天,在官方博客中,微软介绍了改进Windows 8用户界面的更多决定. 首先, ...

  9. shader入门精要读书笔记23 高级纹理-渲染纹理-镜子效果、玻璃效果

    一.前言 现代GPU允许我们把整个三维场景目标渲染到一个中间缓冲中,即渲染目标纹理(RTT). 多重渲染目标(MRT),这种技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理中,而不再需要为每个 ...

最新文章

  1. 吴恩达:AI是时候从大数据转向「小数据」了
  2. python程序设计狄光智_Python程序设计
  3. python爬取贴吧所有帖子-python爬取贴吧帖子
  4. yii框架phpexcel
  5. 一个openMP编程处理图像的示例
  6. Nodejs留言板案例总结
  7. mysql 安装1364_安装完MySQL,在配置最后一步报错error Nr.1364
  8. IntObjectHashMap和HashMap的区别?
  9. MySQL双主(master-master)补充
  10. 算法:时间、空间复杂度
  11. vue项目中配置eslint和prettier
  12. Web前端 ---入门教学
  13. win10无线网卡黄色感叹号
  14. 【英雄联盟】关于我是如何打上超凡大师的,ADC键位设置
  15. GUI用户图形界面:GUILayout控件及使用例子
  16. docker系统中/var/lib/docker/overlay2
  17. Java阿凯_Java-7 面向对象(上)
  18. 阿里云被攻击用高防CDN的效果如何?
  19. ISP—去马赛克和颜色空间变换对图像噪声的影响
  20. 【数学】【裂项相消】Integration-牛客

热门文章

  1. GPU 图像并行处理
  2. 【分享预告】细数GAN和图像分类的前世今生
  3. 全球及中国无菌粉末注射用橡胶塞行业运营模式分析及产销需求预测报告2021年版
  4. NPAPI开发详解,Windows版
  5. VB为自己的程序设定消息(可接收处理)
  6. openresty开发系列24--openresty中lua的引入及使用
  7. java笔记15-日期类
  8. PHP 底层的运行机制与原理 --转
  9. [深度学习]实现一个博弈型的AI,从五子棋开始(1)
  10. hibernate插入数据测试无异常,但数据库没有数据