基于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

基于visual C#2010开发Windows7 AeroGlass特效_第1张图片

一,以winForm为范例

1. 创建一个winForm工程,插入一个explorerbrower控件,插入一个选择控件,并调用Microsoft.WindowsAPICodePack.Shell,

基于visual C#2010开发Windows7 AeroGlass特效_第2张图片

 

2效果如下

 

基于visual C#2010开发Windows7 AeroGlass特效_第3张图片

 

基于visual C#2010开发Windows7 AeroGlass特效_第4张图片

 

 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,

基于visual C#2010开发Windows7 AeroGlass特效_第5张图片

效果如下

2

.基于visual C#2010开发Windows7 AeroGlass特效_第6张图片

 

基于visual C#2010开发Windows7 AeroGlass特效_第7张图片

 

具体实现代码如下,请见代码分析与注释

 

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
{
    /// <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;
        }

    }
}

 

 

 

 


原文链接: http://blog.csdn.net/yincheng01/article/details/5633208

你可能感兴趣的:(基于visual C#2010开发Windows7 AeroGlass特效)