基于visual C#2010开发Windows7 AeroGlass特效 - Yincheng
微软最新一代客户端操作系统Windows 7中,Aero是其图形和用户界面的中心主题。实际上,早在Windows Vista中,Aero就是其图形用户界面的核心。
然而,虽然Aero技术已经出现将近3年时间了,但是很多用户都不知道Aero真正代表的是什么。据微软表示,Windows Aero标签实际上是以下4个概念的融合,即真实、精力充沛、反思和开放。
微软发言人表示,微软在研发Windows Aero技术的时候,就是希望能够为用户带来“真实、精力充沛、反思和开放”的用户体验。
Windows 7桌面体验小组的成员Song Zou表示,Windows 7中的Windows Aero共包含以下3种功能,分别为Aero Shake、 Aero Snap以及Aero Peek。
Aero Shake:
当用户在Windows 7中打开多个程序窗口的时候,您可以选择一个窗口,按住鼠标,接着晃动窗口,这样一来,其他的窗口就会都最小化到任务栏中,只剩下您选定的那个窗口。当然了,如果您还继续晃动选定的窗口的话,那么那些最小化的窗口将会被还原。
Aero Snap:
Aero Snap功能可以自动调整程序窗口的大小。拖动窗口到屏幕底部可以最大化窗口;拖动窗口到屏幕一侧可以半屏显示窗口,如果你再拖动其他窗口到屏幕另一侧,那么两个窗口将并排显示。从屏幕边缘拉出窗口,窗口将恢复到原来状态。
Aero Peek:
当您将鼠标悬停在任务栏程序图标上,Aero Peek功能可以让你预览打开程序窗口。你可以通过单击预览缩略图打开程序窗口,或通过缩略图右上角的“X”关闭程序。
下面我们动手来实践分下AeroGlass特效
启动VS2010
一,以winForm为范例
1. 创建一个winForm工程,插入一个explorerbrower控件,插入一个选择控件,并调用Microsoft.WindowsAPICodePack.Shell,
2效果如下
3.具体实现代码如下,
using Microsoft.WindowsAPICodePack.Shell;
namespace WindowsFormsGlassDemo
{
public partial class Form1 : GlassForm
{
public Form1( )
{
InitializeComponent( );
explorerBrowser2.Navigate( (ShellObject)KnownFolders.Desktop );
AeroGlassCompositionChanged += new AeroGlassCompositionChangedEvent( Form1_AeroGlassCompositionChanged );
if( AeroGlassCompositionEnabled )
{
ExcludeControlFromAeroGlass( panel1 );
}
else
{
this.BackColor = Color.Teal;
}
// 设置初始状态
compositionEnabled.Checked = AeroGlassCompositionEnabled;
}
void Form1_AeroGlassCompositionChanged( object sender, AeroGlassCompositionChangedEvenArgs e )
{
//Aero特效改变的做出的反映
if( e.GlassAvailable )
{
compositionEnabled.Checked = true;
ExcludeControlFromAeroGlass( panel1 );
Invalidate( );
}
else
{
compositionEnabled.Checked = false;
this.BackColor = Color.Teal;
}
}
private void Form1_Resize( object sender, EventArgs e )
{
Rectangle panelRect = ClientRectangle;
panelRect.Inflate( -30, -30 );
panel1.Bounds = panelRect;
ExcludeControlFromAeroGlass( panel1 );
}
private void compositionEnabled_CheckedChanged(object sender, EventArgs e)
{
// 改变特效状态
AeroGlassCompositionEnabled = compositionEnabled.Checked;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
二,以WPF为范例。
1.创建Xaml如下,并调用Microsoft.WindowsAPICodePack.Shell,
效果如下
2
.
具体实现代码如下,请见代码分析与注释
using System.Windows.Threading;
using System.Drawing;
using Microsoft.WindowsAPICodePack.Shell;
namespace WpfGlassDemo
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : GlassWindow
{
public Window1( )
{
InitializeComponent( );
}
private void GlassWindow_Loaded( object sender, RoutedEventArgs e )
{
// 更新GlassRegion
SizeChanged += new SizeChangedEventHandler( Window1_SizeChanged );
//更新 background color
AeroGlassCompositionChanged += new AeroGlassCompositionChangedEvent( Window1_AeroGlassCompositionChanged );
// Set the window background color
if( AeroGlassCompositionEnabled )
{
//启动GDI
ExcludeElementFromAeroGlass( eb1 );
SetAeroGlassTransparency( );
}
else
{
this.Background = System.Windows.Media.Brushes.Teal;
}
// 初始化控件
eb1.NavigationTarget = (ShellObject)KnownFolders.Computer;
//设置状态
EnableCompositionCheck.IsChecked = AeroGlassCompositionEnabled;
}
void Window1_AeroGlassCompositionChanged( object sender, AeroGlassCompositionChangedEvenArgs e )
{
// 随着用户设置而改变Aero特效
if( e.GlassAvailable )
{
this.EnableCompositionCheck.IsChecked = true;
SetAeroGlassTransparency( );
ExcludeElementFromAeroGlass( eb1 );
InvalidateVisual( );
}
else
{
this.EnableCompositionCheck.IsChecked = false;
this.Background = System.Windows.Media.Brushes.Teal;
}
}
void Window1_SizeChanged( object sender, SizeChangedEventArgs e )
{
ExcludeElementFromAeroGlass( eb1 );
}
private void CheckBox_Click( object sender, RoutedEventArgs e )
{
//改变状态
AeroGlassCompositionEnabled = EnableCompositionCheck.IsChecked.Value;
}
}
}