Windows 7 工作列開發 之 進度條(Progress Bar)

來源:互聯網
上載者:User

       上一篇我們完成了“覆蓋表徵圖”(Overlay Icon)的相關開發,本篇我們將對進度條特性進行研究。在使用IE 下載檔案時,工作列表徵圖會同步顯示當前下載進度(如)。那麼在應用程式中如何?這個效果呢?

 下載狀態

 

TaskbarManager.SetProgressValue 方法

       在TaskbarManager 類中有三種不同方式使用SetProgressValue 方法來設定進度條當前位置,其中currentValue 為進度條當前位置的參數,maximumValue 為最大參數:

//設定當前視窗public void SetProgressValue(int currentValue, int maximumValue){    CoreHelpers.ThrowIfNotWin7();    TaskbarList.SetProgressValue(OwnerHandle, Convert.ToUInt32(currentValue), 
Convert.ToUInt32(maximumValue));}//設定指定視窗public void SetProgressValue(int currentValue, int maximumValue,
IntPtr windowHandle){ CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressValue(windowHandle, Convert.ToUInt32(currentValue),
Convert.ToUInt32(maximumValue));}//設定指定WPF視窗public void SetProgressValue(int currentValue, int maximumValue,
System.Windows.Window window){ CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressValue( (new WindowInteropHelper(window)).Handle, Convert.ToUInt32(currentValue), Convert.ToUInt32(maximumValue));}

 

TaskbarProgressBarState 進度條狀態

       除了常見的綠色(Normal 正常狀態)外,還可以通過調用枚舉TaskbarProgressBarState 使用其他幾種狀態,請參看下錶:

名稱 描述
NoProgress 不顯示進度條
Indeterminate 不定值進度條(處於滾動狀態)
Normal 正常狀態(綠色)
Error 錯誤狀態(紅色)
Paused 暫停狀態(黃色)

 

TaskbarManager.SetProgressState 方法

     如何為進度條設定以上狀態呢?當然TaskbarManager 也同樣提供了三種不同的方式使用SetProgressState 方法,對進度條狀態進行相應的設定:

//設定當前視窗狀態public void SetProgressState(TaskbarProgressBarState state){    CoreHelpers.ThrowIfNotWin7();    TaskbarList.SetProgressState(OwnerHandle, (TBPFLAG)state);}//設定指定視窗狀態public void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle){    CoreHelpers.ThrowIfNotWin7();    TaskbarList.SetProgressState(windowHandle, (TBPFLAG)state);}//設定指定WPF視窗狀態public void SetProgressState(TaskbarProgressBarState state, 
System.Windows.Window window){ CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState( (new WindowInteropHelper(window)).Handle, (TBPFLAG)state);}

 

效果示範

       下面只需要在程式中使用以上方法便可實現對進度條的控制,下面代碼通過Slider 調節進度條當前數值:

TaskbarManager.Instance.SetProgressValue((int)progressSlider.Value, 100);TaskbarManager.Instance.SetProgressState(
(TaskbarProgressBarState)progressBarStatus.SelectedItem);

 

通過調整進度條呈現出三種不同的狀態效果:

 正常狀態      錯誤狀態      暫停狀態

 

閃動效果

       使用Live Messenger(LM)聊天時,如果對方發出了資訊LM 表徵圖會閃動提示,雖然Windows API 沒有直接控制閃動效果的方法,但該效果在開發中可能會經常使用,下面代碼為一個閃動效果類:

internal sealed class FlashWindowHelper{    DispatcherTimer _timer;    int _count = 0;    int _maxTimes = 0;    Window _window;    public void Flash(int times, double millliseconds, Window window)    {        _timer = new DispatcherTimer();        _maxTimes = times;        _timer.Interval = TimeSpan.FromMilliseconds(millliseconds);        _timer.Tick += OnTick;        _window = window;        _timer.Start();    }    void OnTick(object sender, EventArgs e)    {        if (++_count < _maxTimes)        {            Win32.FlashWindow(new WindowInteropHelper(_window).Handle, (_count % 2) == 0);        }        else        {            _timer.Stop();        }    }}internal static class Win32{    [DllImport("user32.dll")]    public static extern bool FlashWindow(IntPtr hwnd, bool bInvert);}

 

通過FlashWindowHelper 類可以輕鬆的使工作列表徵圖閃動起來:

private void flashTaskbar_Click(object sender, RoutedEventArgs e){    FlashWindowHelper helper = new FlashWindowHelper();    helper.Flash(8, 400, Application.Current.MainWindow);}

  閃動效果

 

相關參考資料

1. Windows 7 Taskbar Dynamic Overlay Icons and Progress Bars

http://windowsteamblog.com/blogs/developers/archive/2009/07/28/windows-7-taskbar-dynamic-overlay-icons-and-progress-bars.aspx

2. SetProgressValue Method

http://msdn.microsoft.com/en-us/library/dd391698(VS.85).aspx

3. SetProgressState Method

http://msdn.microsoft.com/en-us/library/dd391697(VS.85).aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.