Windows 7 任务栏开发 之 进度条(Progress Bar)
上一篇我们完成了“覆盖图标”(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
出处:{GnieTech} (http://www.cnblogs.com/gnielee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
Windows 7 任务栏开发 之 进度条(Progress Bar)的更多相关文章
- 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- python3+2 不换行打印,多用于进度条 process bar
python3 不换行打印,多用于进度条 process bar process = 0 # process bar for i in user: process += 1 print("\ ...
- amazeui学习笔记--css(常用组件13)--进度条Progress
amazeui学习笔记--css(常用组件13)--进度条Progress 一.总结 1.进度条基本使用:进度条组件,.am-progress 为容器,.am-progress-bar 为进度显示信息 ...
- 详解HTML5中的进度条progress元素简介及兼容性处理
一.progress元素基本了解 1.基本知识 progress元素属于HTML5家族,指进度条.IE10+以及其他靠谱浏览器都支持. 注释:Internet Explorer 9 以及更早的版本不支 ...
- vue 渐变 进度条 progress
废话 不多少说 ,直接上代码 新建文件 gradual-progress.vue <!-- * @Author: gfc * @Date: 2019-11-07 14:00:11 * @Last ...
- windows phone之山寨win8圆形进度条
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- Python全栈开发:进度条
import sys import time for i in range(31): # 清空打印内容 sys.stdout.write("\r") # 控制输出样式 sys.st ...
- 【原】Github系列之三:开源iOS下 渐变颜色的进度条WGradientProgress
概述 今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移 ...
- BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)
上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前 ...
- 渐变颜色的进度条WGradientProgress-备用
今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移动的, ...
随机推荐
- 文档在线预览(一)通过将txt、word、pdf、ppt转成图片实现在线预览功能
@ 目录 一.前言 1.aspose 2 .poi + pdfbox 3 spire 二.将文件转换成图片,并生成到本地 1.将word文件转成图片 (1)使用aspose (2)使用pdfbox ( ...
- CentOS 7快速安装配置 Odoo 12
> Coding > CentOS 7快速安装配置 Odoo 12 CentOS 7快速安装配置 Odoo 12 Coding Alan 11个月前 (10-19) 4777次浏览 ...
- 重走py 之路 ——字典和集合(二)
前言 python 中有6大标准类型: 数字(Number) 字符串(String) 列表(List) 元组(Tumple) 集合(Set) 字典(Dictionary) 前面已经介绍了上面4种,还有 ...
- C++ 默认参数与引用传递:语法、用法及示例
C++ 默认参数 默认参数概述 在 C++ 中,函数参数可以拥有默认值.这意味着,在调用函数时,如果省略了某个参数,那么将使用为该参数指定的默认值. 设置默认参数 默认参数值使用等号 = 符号进行设置 ...
- 大数据ETL开发之图解Kettle工具入门到精通(经典转载)
大数据ETL开发之图解Kettle工具(入门到精通) 置顶 袁袁袁袁满 文章目录 第0章 ETL简介 第1章 Kettle简介 1.1 Kettle是什么 1.2 Kettle的两种设计 1.3 Ke ...
- NOIP模拟四
NOIP模拟四 number 题目描述 现有 \(2^n\) 个点,点编号为 \(0\sim2^n-1\). 定义这些点的一张异或图为: 先选定一个集合 \(S\). 对于原图上编号为 \(x\) 和 ...
- DataWorks功能实践速览 05——循环与遍历
简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率!通过往期的介绍,您已经了解到在DataWorks上进行任务运行的最关键的几个知识点,其中上期参数透传中为 ...
- 浅谈 Linux 高负载的系统化分析
简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析. 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体 ...
- 10.prometheus监控--监控进程process
一.进程监控 如果想要对主机的进程进行监控,例如chronyd,sshd等服务进程以及自定义脚本程序运行状态监控.我们使用node exporter就不能实现需求了,此时就需要使用process ex ...
- aspnetcore项目中kafka组件封装
前段时间在项目中把用到kafka组件完全剥离开出来,项目需要可以直接集成进去.源代码如下: liuzhixin405/My.Project (github.com) 组件结构如下,代码太多不一一列举, ...