`
wangleifire
  • 浏览: 500027 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Windows 7 任务栏开发 之 进度条(Progress Bar)

    博客分类:
  • c#
阅读更多

       上一篇 我们完成了“覆盖图标”(Overlay Icon)的相关开发,本篇我们将对进度条特性进行研究。在使用IE 下载文件时,任务栏图标会同步显示当前下载进度(如下图)。那么在应用程序中如何实现这个效果呢?

iedownload  下载状态

 

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);

 

通过调整进度条呈现出三种不同的状态效果:

slider

normal  正常状态     error  错误状态     pause  暂停状态

 

闪动效果

       使用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);
}
分享到:
评论

相关推荐

    MFC 状态栏上显示进度条

    MFC 状态栏上显示4中不同效果的进度条 Progress Control

    Node.CLI-Progress:命令行终端应用程序易于使用的进度条

    yarn add cli-progress$ npm install cli-progress --save产品特点简单,坚固且易于使用完全可定制的输出格式(可用占位符) 单进度条模式多进度条模式自定义栏字符FPS限制器根据经过时间估算ETA 自定义令牌以在栏中...

    Taskbar Progressbar Control

    原始资源地址:http://www.codeproject.com/KB/statusbar/taskbarctrl.aspx 实现了在任务栏的语言和输入法图标的区域添加自己的控件;

    progress_bar_cpp

    初始化进度条ProgressBar name(char notDoneChar, char doneChar,unsigned int size) ,notDoneChar是开始执行流程之前将填充的进度条,doneChar是进度栏正在处理时填充的进度条完毕。 size是栏的大小。 fillUp() ...

    电子进度条:电子进度条提供了易于使用且高度可定制的API,以显示和控制电子应用程序上的进度条

    另外,进度条也会显示在任务栏中(通过BrowserWindow的 )。 这使得窗口能够向用户提供进度信息,而用户不必切换到窗口本身。 不确定进度条的任务栏: 确定进度条的任务栏: 目录 ⇒ object ⇒ reference to ...

    Visual C++2010开发权威指南(共三部分).part1.rar

    5.16 Visual C++ 2010 Scroll Bar控件简介与开发 246 5.17 Visual C++ 2010 Hot Key控件简介与开发 248 5.17.1 使用热键控件 248 5.17.2 设置热键 249 5.18 Visual C++ 2010 Animation控件简介与开发 249 5.18.1 ...

    Android开发案例驱动教程 配套代码

    5.7 Progress Bar 70 5.7.1 条状进度条 71 5.7.2 圆形进度条 73 5.7.3 对话框进度条 74 5.7.4 标题栏中进度条 75 5.8 SeekBar 76 5.9 RatingBar 78 本章小结 82 第6章 UI高级控件 83 6.1 列表类控件 83 ...

    react-redux-loading-bar:Redux和React的加载栏(又称进度栏)

    一个React组件,为长时间运行的任务提供Loading Bar(即进度条)。 由组成: React组件-显示加载栏并模拟进度 Redux Reducer —管理商店中的加载栏 (可选)Redux中间件-自动显示和隐藏带有承诺的操作的加载栏 ...

    VB编程资源大全(源码 控件)

    iee.zip 利用Windows API便历系统中的窗口,从中找到浏览器窗口并利用SendMessage改变其地址输入栏中的内容(3KB) 39,docktoolbar.zip 一个类似于Office Toolbar那样可以实现Dock的程序(14KB) 40,cool ...

    VB编程资源大全(源码 控制)

    1,listview.ZIP 演示使用listview控制, 作出资源管理器中目录树中的效果 (7KB) 2,dirview.ZIP 装入整个 c 盘目录到 treeview (4KB) 3,progress.ZIP 演示使用win95的进度条(3KB) 4,progbar.ZIP ...

    JS学习笔记相关代码-测试代码

    进度控制, 除了使用&lt;div class="progress-bar progress-bar-success"&gt;直接控制进度条的长度外,还可以使用如下功能: &lt;progress value="50" max="100"&gt;&lt;/progress&gt;以实现进度条的变更控制,从后台获取数据,并计算...

Global site tag (gtag.js) - Google Analytics