Windows 7 任務(wù)欄開發(fā)之進(jìn)度條(Progress Bar)
上一篇我們完成了“覆蓋圖標(biāo)(Overlay Icon)的相關(guān)開發(fā),本篇我們將對(duì)進(jìn)度條特性進(jìn)行研究。在使用IE 下載文件時(shí),任務(wù)欄圖標(biāo)會(huì)同步顯示當(dāng)前下載進(jìn)度(如下圖)。那么在應(yīng)用程序中如何實(shí)現(xiàn)這個(gè)效果呢?
下載狀態(tài)
TaskbarManager.SetProgressValue 方法
在TaskbarManager 類中有三種不同方式使用SetProgressValue 方法來設(shè)置進(jìn)度條當(dāng)前位置,其中currentValue 為進(jìn)度條當(dāng)前位置的參數(shù),maximumValue 為最大參數(shù):
//設(shè)置當(dāng)前窗口 public void SetProgressValue(int currentValue, int maximumValue) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressValue(OwnerHandle, Convert.ToUInt32(currentValue), Convert.ToUInt32(maximumValue)); } //設(shè)置指定窗口 public void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressValue(windowHandle, Convert.ToUInt32(currentValue), Convert.ToUInt32(maximumValue)); } //設(shè)置指定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 進(jìn)度條狀態(tài)
除了常見的綠色(Normal 正常狀態(tài))外,還可以通過調(diào)用枚舉TaskbarProgressBarState 使用其他幾種狀態(tài),請(qǐng)參看下表:
名稱 描述NoProgress 不顯示進(jìn)度條Indeterminate 不定值進(jìn)度條(處于滾動(dòng)狀態(tài))Normal 正常狀態(tài)(綠色)Error 錯(cuò)誤狀態(tài)(紅色)Paused 暫停狀態(tài)(黃色)
TaskbarManager.SetProgressState 方法
如何為進(jìn)度條設(shè)置以上狀態(tài)呢?當(dāng)然TaskbarManager 也同樣提供了三種不同的方式使用SetProgressState 方法,對(duì)進(jìn)度條狀態(tài)進(jìn)行相應(yīng)的設(shè)置:
//設(shè)置當(dāng)前窗口狀態(tài) public void SetProgressState(TaskbarProgressBarState state) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState(OwnerHandle, (TBPFLAG)state); } //設(shè)置指定窗口狀態(tài) public void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState(windowHandle, (TBPFLAG)state); } //設(shè)置指定WPF窗口狀態(tài) public void SetProgressState(TaskbarProgressBarState state, System.Windows.Window window) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState( (new WindowInteropHelper(window)).Handle, (TBPFLAG)state); }
效果演示
下面只需要在程序中使用以上方法便可實(shí)現(xiàn)對(duì)進(jìn)度條的控制,下面代碼通過Slider 調(diào)節(jié)進(jìn)度條當(dāng)前數(shù)值:
TaskbarManager.Instance.SetProgressValue((int)progressSlider.Value, 100); TaskbarManager.Instance.SetProgressState((TaskbarProgressBarState)progressBarStatus.SelectedItem);
通過調(diào)整進(jìn)度條呈現(xiàn)出三種不同的狀態(tài)效果:
正常狀態(tài)
錯(cuò)誤狀態(tài)
暫停狀態(tài)
閃動(dòng)效果
使用Live Messenger(LM)聊天時(shí),如果對(duì)方發(fā)出了信息LM 圖標(biāo)會(huì)閃動(dòng)提示,雖然Windows API 沒有直接控制閃動(dòng)效果的方法,但該效果在開發(fā)中可能會(huì)經(jīng)常使用,下面代碼為一個(gè)閃動(dòng)效果類:
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 類可以輕松的使任務(wù)欄圖標(biāo)閃動(dòng)起來:
private void flashTaskbar_Click(object sender, RoutedEventArgs e) { FlashWindowHelper helper = new FlashWindowHelper(); helper.Flash(8, 400, Application.Current.MainWindow); }
閃動(dòng)效果
出處: http://www.cnblogs.com/gnielee/
相關(guān)文章:
1. Win11如何隱藏任務(wù)欄?Win11設(shè)置自動(dòng)隱藏任務(wù)欄教程2. Windows Vista與Windows 7的任務(wù)欄像素尺寸對(duì)比3. win10系統(tǒng)如何去除任務(wù)欄中的地址欄?4. Windows11系統(tǒng)截圖曝光 圓角設(shè)計(jì)及任務(wù)欄菜單等更舒適5. Win10任務(wù)欄圖標(biāo)一閃一閃的提示消息怎么解決?6. Win11怎么設(shè)置任務(wù)欄透明?Win11任務(wù)欄透明設(shè)置教程7. Windows 7超級(jí)任務(wù)欄使用小技巧8. Win10右下角任務(wù)欄defend消失怎么處理?9. Win11任務(wù)欄怎么透明 Windows11秒變透明任務(wù)欄的設(shè)置方法10.排行榜怎么繞開Win11 TPM2.0升級(jí)限制?繞開Win11 TPM2.0升級(jí)限制操作方法 1. win11大更新全新菜單功能包含多個(gè)重磅特色 2. 在windows7下純凈安裝和雙啟動(dòng)安裝xp/2003的方法 3. Win10系統(tǒng)如何管理便簽功能? Win10系統(tǒng)便簽功能使用方法說明 4. Win10兩個(gè)屏幕如何配置和切換? 5. 用Win7的WinRE功能修復(fù)系統(tǒng) 6. Windows10麥克風(fēng)無法錄音怎么辦? 7. Win10中訪問局域網(wǎng)提示無權(quán)限使用網(wǎng)絡(luò)資源具體處理步驟 8. Win11如何隱藏任務(wù)欄?Win11設(shè)置自動(dòng)隱藏任務(wù)欄教程 9. 技巧:Windows XP的小秘密 10. win11檢測(cè)工具無法打開解決教程