上一篇我们完成了“覆盖图标”(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

作者:李敬然(Gnie)
出处:{GnieTech} (http://www.cnblogs.com/gnielee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
 
分类: C# , Windows
 
 

Windows 7 任务栏开发 之 进度条(Progress Bar)的更多相关文章

  1. 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  2. python3+2 不换行打印,多用于进度条 process bar

    python3 不换行打印,多用于进度条 process bar process = 0 # process bar for i in user: process += 1 print("\ ...

  3. amazeui学习笔记--css(常用组件13)--进度条Progress

    amazeui学习笔记--css(常用组件13)--进度条Progress 一.总结 1.进度条基本使用:进度条组件,.am-progress 为容器,.am-progress-bar 为进度显示信息 ...

  4. 详解HTML5中的进度条progress元素简介及兼容性处理

    一.progress元素基本了解 1.基本知识 progress元素属于HTML5家族,指进度条.IE10+以及其他靠谱浏览器都支持. 注释:Internet Explorer 9 以及更早的版本不支 ...

  5. vue 渐变 进度条 progress

    废话 不多少说 ,直接上代码 新建文件 gradual-progress.vue <!-- * @Author: gfc * @Date: 2019-11-07 14:00:11 * @Last ...

  6. windows phone之山寨win8圆形进度条

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  7. Python全栈开发:进度条

    import sys import time for i in range(31): # 清空打印内容 sys.stdout.write("\r") # 控制输出样式 sys.st ...

  8. 【原】Github系列之三:开源iOS下 渐变颜色的进度条WGradientProgress

    概述 今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移 ...

  9. BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)

    上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前 ...

  10. 渐变颜色的进度条WGradientProgress-备用

    今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移动的, ...

随机推荐

  1. MVC如何创建区域

    前言 MVC 划分区域可以为项目成立不同的小模块,方便团队之间开发,与增强项目结构的清晰度. 正文 建立区域: 在areas里面建立区域.,然后填写命名. 然后区域注册即可: 但是这样做依然无法解决项 ...

  2. background-blend-mode

    由于 mix-blend-mode 这个属性的强大,很多应用场景和动效的制作不断完善和被发掘出来,遂另起一文继续介绍一些使用 mix-blend-mode 制作的酷炫动画. CSS3 新增了一个很有意 ...

  3. Go语言打印九九乘法表,这是整洁代码范例

    Go语言打印九九乘法表,这是整洁代码范例 / Go 语言输出九九乘法表 / 九九乘法表是我们学习编程时的一项基本练习,它看似简单,通过实现输出九九乘法表可以加深对 Go 语言循环结构的理解和运用. 本 ...

  4. 【笔记】rocketMQ了解

    记录rocketMQ 忘了从哪儿保存的图了 原图链接:https://www.jianshu.com/p/2838890f3284

  5. 第五章:SQL高级处理

    第五章:SQL高级处理 5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数.OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数 ...

  6. EasyCV DataHub 提供多领域视觉数据集下载,助力模型生产

    简介: 在人工智能广泛应用的今天,深度学习技术已经在各行各业起到了重要的作用.在计算机视觉领域,深度学习技术在大多数场景已经替代了传统视觉方法.如果说深度学习是一项重要的生产工具,那么数据就是不可或缺 ...

  7. 对话 Dubbo 唤醒者北纬:3.0 将至,阿里核心电商业务也在用 Dubbo

    简介: 如今,Dubbo 已经毕业一年,越来越多开发者开始询问 Dubbo 3.0 到底有哪些变化,阿里巴巴内部到底用不用 Dubbo,这是不是一个 KPI 开源项目以及 Dubbo 和 Spring ...

  8. 【ClickHouse 技术系列】- 在 ClickHouse 中处理实时更新

    ​简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...

  9. dotnet 6 在 System.Text.Json 使用 source generation 源代码生成提升 JSON 序列化性能

    这是一个在 dotnet 6 早就引入的功能,此功能的使用方法能简单,提升的效果也很棒.使用的时候需要将 Json 序列化工具类换成 dotnet 运行时自带的 System.Text.Json 进行 ...

  10. kubeadm搭建单master多node节点的k8s集群(3)

    一.实验环境准备 K8s集群角色 IP 主机名 安装的组件 配置 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.etc ...