.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相干的功能外,法度可以持续工作,是以你须要在法度中推敲各类不合景象下的应用,这个是须要思虑的器材。




人只有献身于社会,才能找出那实际上是短暂而有风险的生命的意义。——爱因斯坦
来源:http://www.cnblogs.com/jaxu/archive/2011/08/03/2125768.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值