Winforms: Windows 7中Taskbar的新效果(3)——进度条
来源:互联网 发布:思迅商云网络断开 编辑:程序博客网 时间:2024/06/01 16:25
在Win7中,当我们从网上下载一个比较大的文件的时候,我们发现下载对应的窗口在Taskbar上对应的按钮有进度条来显示下载的进展情况。Win7为了方便开发这种新的UI效果,Windows提供了两个API:
· void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
· void SetProgressState(IntPtr hwnd, TBPFLAG tbpFlags);
SetProgressValue有三个参数:第一个参数hwnd是进程主窗口的句柄,第二个参数ullCompleted是当前已经完成的进度,第三个参数ullTotal就是进度总值。根据后两个参数,Win7就可以确定进度条显示的比例。
SetProgressState有两个参数:第一个参数hwnd同样也是进程主窗口的句柄,第二个参数表示进度状态。Win7提供了如下几种状态:没有进展(NoProgress)、不确定进度(Indeterminate)、正常(Normal)、出错(Error)和暂停(Paused)。我们可以定义如下枚举类型表示这几种状态:
public enum TaskbarProgressBarState
{
NoProgress = 0,
Indeterminate = 0x1,
Normal = 0x2,
Error = 0x4,
Paused = 0x8
}
接下来我们用一个例子来详细说明如果调用上面两个API来实现Win7中Taskbar的进度条效果:
1. 在form上添加一个Text属性为State的Label,在它的右边添加ComboBox并命名为comboBoxProgressBarStates ;
2. 在form上添加一个Text属性为Value的Label,在它的右边添加TackBar并命名为tackBarProgressBarValue;
此时程序的界面效果如下图所示:
3. 在类TaskManager中添加一个方法SetProgressBarState如下:
public void SetProgressState(IntPtr windowHandle, TaskbarProgressBarState state)
{
ThrowIfNotSupport();
TaskbarList.SetProgressState(windowHandle, (TBPFLAG)state);
}
4. 在类TaskManager中添加一个方法SetProgressBarValue如下:
public void SetProgressValue(IntPtr windowHandle, int currentValue, int maximumValue)
{
ThrowIfNotSupport();
TaskbarList.SetProgressValue(windowHandle, Convert.ToUInt32(currentValue), Convert.ToUInt32(maximumValue));
}
5. 在form中获取TaskManager的一个实例:
// Keep a reference to the Taskbar instance
private TaskbarManager windowsTaskbar = TaskbarManager.Instance;
6. 为form添加Show事件响应器,初始化ComboBox和Taskbar进度条状态如下:
private void FormProgressBar_Shown(object sender, EventArgs e)
{
// Add each item into comboBoxProgressBarStates
foreach (string state in Enum.GetNames(typeof(TaskbarProgressBarState)))
comboBoxProgressBarStates.Items.Add(state);
comboBoxProgressBarStates.SelectedItem = "NoProgress";
// Set our default
TaskbarManager.Instance.SetProgressState(this.Handle, TaskbarProgressBarState.NoProgress);
}
7. 为ComboBox添加IndexChanged事件响应器如下:
private void comboBoxProgressBarStates_SelectedIndexChanged(object sender, EventArgs e)
{
// Update the status of the taskbar progress bar
TaskbarProgressBarState state = (TaskbarProgressBarState)(Enum.Parse(typeof(TaskbarProgressBarState), (string)comboBoxProgressBarStates.SelectedItem));
windowsTaskbar.SetProgressState(this.Handle, state);
// Update the application progress bar,
// as well disable the trackbar in some cases
switch (state)
{
case TaskbarProgressBarState.Normal:
windowsTaskbar.SetProgressValue(this.Handle, trackBarProgressBarValue.Value, 100);
trackBarProgressBarValue.Enabled = true;
break;
case TaskbarProgressBarState.Paused:
windowsTaskbar.SetProgressValue(this.Handle, trackBarProgressBarValue.Value, 100);
trackBarProgressBarValue.Enabled = true;
break;
case TaskbarProgressBarState.Error:
windowsTaskbar.SetProgressValue(this.Handle, trackBarProgressBarValue.Value, 100);
trackBarProgressBarValue.Enabled = true;
break;
case TaskbarProgressBarState.Indeterminate:
trackBarProgressBarValue.Enabled = false;
break;
case TaskbarProgressBarState.NoProgress:
trackBarProgressBarValue.Value = 0;
trackBarProgressBarValue.Enabled = false;
break;
}
}
8. 为TackBar添加Scroll事件响应器如下:
private void trackBarProgressBarValue_Scroll(object sender, EventArgs e)
{
TaskbarManager.Instance.SetProgressValue(this.Handle, trackBarProgressBarValue.Value, 100);
}
9. 编译运行。
当进度条的状态为NoProgress时,该程序在Taskbar上显示为:
当进度条的状态为Indeterminate时,该程序在Taskbar不能确定其进度,所以进度条循环显示。下面是其截屏:
当进度条的状态为Normal时,该程序在Taskbar的进度条已经完成的部分显示为绿色,显示为:
当进度条的状态为Error时,该程序在Taskbar的进度条已经完成的部分显示为红色,显示为:
当进度条的状态为Paused时,该程序在Taskbar的进度条已经完成的部分显示为黄色,显示为:
- Winforms: Windows 7中Taskbar的新效果(3)——进度条
- Winforms: Windows 7中Taskbar的新效果(1)——概述
- Winforms: Windows 7中Taskbar的新效果(2)——Overlay Icon
- Winforms:Windows 7中Taskbar的新效果(4)——缩略图工具栏
- C#语言操作Win7系统任务栏(TaskBar)中程序图标的背景进度条
- Delphi2010中Windows7新的taskbar功能的使用
- Delphi2010 中 Windows7新的 taskbar 功能的使用
- Windows 7:定制所有登陆用户的Taskbar固定图标
- Winforms: 在TreeView中应用Vista Explorer的新风格
- Winforms: 在TreeView中应用Vista Explorer的新风格
- Windows 7 Recipe – Taskbar Single Instance
- Android 中带有进度条效果的按钮(Button)
- Delphi之Windows Taskbar API 编程,包括任务栏进度条,图标覆盖,任务栏缩略图,跳转列表
- Windows CE 5.0待机界面定制之一 - Taskbar的位置
- Windows CE 5.0待机界面定制之一 - Taskbar的位置
- A Friently Introduction to the Windows 7 Taskbar Features
- windows command line (cmder + cygwin + 7+ Taskbar Tweaker)
- Android进度条自定义——类似ProgressDialog效果的Dialog
- ASP.NET 2.0 绑定高级技巧
- Flex+java开发环境配置
- 层序遍历二叉树
- const与指针搭配使用总结
- c++之学习程序Matrix_1
- Winforms: Windows 7中Taskbar的新效果(3)——进度条
- pku 1087 A Plug for UNIX 网络流 解题报告
- 循环队列例程,vc++2008编译
- itoa()源码
- 初学ibatis,总结遇到的问题(一)
- MFC学习笔记(二)——简单绘图
- 汇编语言复习之--寻址方式1
- OO思想: 关于C++的接口类
- JavaScript 表单提交校验函数库