基于visual C#2010开发Windows7 AeroGlass特效

微软最新一代客户端操作系统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 System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; 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; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; using System.Drawing; using Microsoft.WindowsAPICodePack.Shell; namespace WpfGlassDemo { ///

/// Interaction logic for Window1.xaml /// 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; } } }

 

 

 

 

你可能感兴趣的:(C#4.0技术,Windows7编程技术)