西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → WPF 中编写具有玻璃效果主题的程序技巧(Aero Glass)

WPF 中编写具有玻璃效果主题的程序技巧(Aero Glass)

相关软件相关文章发表评论 来源:西西整理时间:2011/4/24 7:50:02字体大小:A-A+

作者:西西点击:427次评论:0次标签: Aero

3D快速启动Aero QLaunch1.2.22英文官方安装版
  • 类型:系统其它大小:1.2M语言:英文 评分:5.0
  • 标签:
立即下载

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;

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)