.NET WinForm程序在Windows7下实现玻璃效果和任务栏进度条效果

Windows7提供了许多不错的用户体验,诸如窗体背景透明、玻璃磨砂效果、任务栏的JumpList定义以及任务栏进度条显示等等。伴随着这些特效的出现,Windows在底层也提供了相应的API支持,使得开发人员可以根据需要非常容易地在自己的应用程序中实现这些效果。如果你是原生的C++追随者,那恭喜你了!你完全可以毫无障碍地去使用这些API,前提是你需要阅读庞大的开发文档。如果你是新生的.NET开发人员(姑且还是将.NET developer称之为新生者吧,毕竟咱比C++出来得晚),也没有关系,微软在msdn网站中也发布了专门的Windows7 API托管类库,专门用于在.NET应用程序中调用。先来看看IE浏览器在Windows 7下下载文件时任务栏的进度条显示吧,相信很多人都不会陌生,如果你还闻所未闻,要么是你已经out了要么就是你从来就没有关注过Windows 7的这些细节。

  要在你自己的.NET应用程序中实现这个效果仅仅靠现有的.NET类库是不够的,必须要借助于Windows 7 API的支持。有关在托管代码中调用Windows 7 API可以看微软msdn上的一篇文章,http://archive.msdn.microsoft.com/WindowsAPICodePack。首先需要下载并安装Windows_API_Code_Pack_Self_Extractor,其实就是一个压缩包,里面包含了所有的源代码以及大量的示例,并附有文档可以查阅,非常详细。不过使用这些类库有几个前提条件:

  1. .NET Framework的版本必须是3.5SP1及以上。

  2. 运行的环境必须是在Windows 7 RTM及其相关版本,在Vista下部分功能可用。

  3. 需要DirectX的支持。

  下面是我用这些类库实现的一个效果,包含了窗体透明玻璃磨砂效果以及任务栏进度条显示。

  实现的代码很简单,但前提是你引用了WindowsAPICodePack的相关类库。

复制代码
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  System.Threading;
using  Microsoft.WindowsAPICodePack.Taskbar;
using  Microsoft.WindowsAPICodePack.Shell;

namespace  VerticalProgressBar
{
    
public   partial   class  Form1 : GlassForm
    {
        
protected  BackgroundWorker worker  =   null ;

        
public  Form1()
        {
            InitializeComponent();
            worker 
=   new  BackgroundWorker();
            worker.WorkerReportsProgress 
=   true ;
            worker.DoWork 
+=   new  DoWorkEventHandler(worker_DoWork);
            worker.ProgressChanged 
+=   new  ProgressChangedEventHandler(worker_ProgressChanged);
            worker.RunWorkerCompleted 
+=   new  RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);

            worker.RunWorkerAsync();
        }

        
void  worker_RunWorkerCompleted( object  sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show(
" Complete! " );
        }

        
void  worker_ProgressChanged( object  sender, ProgressChangedEventArgs e)
        {
            
this .progressBar2.Value  =  e.ProgressPercentage;

            TaskbarManager.Instance.SetProgressValue(
this .progressBar2.Value,  this .progressBar2.Maximum);
        }

        
void  worker_DoWork( object  sender, DoWorkEventArgs e)
        {
            
int  count  =   100 ;
            
for  ( int  i  =   0 ; i  <=  count; i ++ )
            {
                Thread.Sleep(
100 );
                worker.ReportProgress(i);
            }
        }
    }
}
复制代码

  工程中引入了Microsoft.WindowsAPICodePack.dll和Microsoft.WindowsAPICodePack.Shell.dll。如果想让窗体呈现透明背景的玻璃磨砂效果,需要将窗体的类继承自Microsoft.WindowsAPICodePack.Shell.GlassForm。另外,在worker_ProgressChanged事件处理方法中,除了更新窗体上的ProgressBar外,我们还通过TaskbarManager.Instance.SetProgressValue方法来更新Windows任务栏的进度条显示。

  有了这个功能强大的托管类库的支持,可以非常方便地调用Windows7的API来实现那些非常酷的效果。不过这里有一个小问题需要解决,当你在你的应用程序中使用了这个类库并且在Windows7下实现了想要的效果,如果用户运行的Windows环境是XP或2003,那么你的程序会抛出异常,类似于下面的截图。

   其实除了Windows API相关的功能外,程序可以继续工作,因此你需要在程序中考虑各种不同环境下的应用,这个是需要思考的东西。


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/archive/2011/08/03/2125768.html,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值