.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,如需转载请自行联系原作者


相关文章
|
2月前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
42 4
|
14天前
|
C# 开发者 Windows
4款.NET开源、功能强大的Windows桌面工具箱
4款.NET开源、功能强大的Windows桌面工具箱
|
19天前
|
C# 开发者 Windows
WPF在.NET9中的重大更新:Windows 11 主题
这也是一个很好的学习WPF的项目,可以通过看源代码提升自己的WPF水平。 WPF Gallery演示如何在标记中指定 XAML 控件,因为每个控件页都显示用于创建每个示例的标记。它还将显示您的应用程序的所有可能的布局选项。 WPF Gallery应用还包含有关使用颜色、排版和图标开发特殊应用程序的设计指南。它还包括一个示例页,用于演示如何使用不同的控件在 WPF 应用程序中创建用户界面。 WPF在.NET 9中可以使用Win11主题的控件了,有助于WPF开发者们开发出更符合现在设计风格、更美观的界面。 希望WPF越来越好。
25 0
|
1月前
|
Windows
windows系统bat批处理 开机一键多个程序
windows系统bat批处理 开机一键多个程序
22 1
|
23天前
|
存储 安全 C#
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
|
23天前
|
开发框架 前端开发 JavaScript
程序与技术分享:ASP.NET发展史(【译】)
程序与技术分享:ASP.NET发展史(【译】)
16 0
|
2月前
|
Windows
LabVIEW启用/禁用Windows屏幕保护程序
LabVIEW启用/禁用Windows屏幕保护程序
31 4
LabVIEW启用/禁用Windows屏幕保护程序
|
24天前
|
网络协议
技术好文:Smark.Net实现简单聊天程序
技术好文:Smark.Net实现简单聊天程序
13 0
|
26天前
|
C++ UED 开发者
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
14 0
|
2月前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。
101 4