zoukankan      html  css  js  c++  java
  • Windows 7 扩展玻璃效果(Aero Glass)

    转自:http://www.cnblogs.com/gnielee/archive/2010/10/04/windows7-extend-aero-glass.html

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

    GlassExample

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

    Notepad

    首先,从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;
        }
    }

    演示效果

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

    Default

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

    AllGlass

    Windows API

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

    GlassWindow.AeroGlassCompositionEnabled = checkBox.IsChecked.Value;

    源代码

    WpfAeroGlass.zip

  • 相关阅读:
    Ubuntu 安装mono
    关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
    android 常用框架
    理解assign,copy,retain变strong
    SQLSERVER2008R2正确使用索引
    除非 Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站。目前,这两项服务均处于停止状态。
    Android资源命名规范
    eclipse导入Android项目后,项目的名称变为了主Activity的名称
    日常运维管理技巧一(查看负载 W)
    Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3251657.html
Copyright © 2011-2022 走看看