.NET WinForm程式在Windows7下實現半透明效果和工作列進度條效果

來源:互聯網
上載者:User

  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的支援。有關在Managed 程式碼中調用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相關的功能外,程式可以繼續工作,因此你需要在程式中考慮各種不同環境下的應用,這個是需要思考的東西。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.