• 正在加载中...
  • 进度条

    进度条即计算机在处理文件时,实时的,以图片形式显示处理文件的速度,完成度,剩余未完成文件的大小,和可能需要处理时间,一般以长方形条状显示。

    编辑摘要

    基本信息 编辑信息模块

    中文名: 进度条
    作用: 以图片形式显示处理任务的速度 形状: 长方形
    运行时间段: 计算机处理任务时

    目录

    历史/进度条 编辑

    进度条进度条
    在数字运算机发明之前,就已经有了进度条的概念。1896 年,Karol Adamiecki(波兰人;经济学家,工程师和管理研究人员),发明了一种叫做harmonogram(波兰语,时间表)的图表;1903年,他的理论在俄罗斯技术界引起了轰动。他在波兰杂志《 Przegląd Techniczny 》发表了一些文章(1909)。 1931年,他发表了一篇更广为人知的文章《armonogram or harmonograf.》(波兰语,日程或时间表),描述他的图。Adamiecki只是在波兰和俄罗斯发表这些文章,较少被英语国家了解。
    同一时间,亨利·甘特(Henry Gantt)提出类似的方法已在西方普及,他在1910年和1915年都发表过文章。算是以讹传讹吧,Adamiecki的图表就被叫做为甘特图。这个概念后来被用于计算领域。[1]

    处理方法/进度条 编辑

    以文件处理为例
    单个文件的进度处理方法:
    使用CopyFileEx进行文件复制,这个函数专门提供了一个回调函数用来处理你的进度条,详细参见MSDN。
    总体进度的处理方法:
    进度条
    进度条
    如果一批文件,首先获得文件的数量count = 文件数量
    设置进条的范围为0至count,每完成一个文件,就向前进一步。

    C语言/进度条 编辑

    (来自网络)

    C文件

    #include <windows.h>
    #include <commctrl.h> //InitCommonControls
    //过程函数的返回值都是LRESULT,类型都是CALLBACK
    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
    {
    HWND hwnd; //主窗口句柄,在CreateWindow中赋值
    MSG msg; //消息变量,在GetMessage中使用
    WNDCLASS wndclass; //窗口类
    TCHAR* szAppName = TEXT("ProgressBar"); //类名和窗口名
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景
    wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //鼠标
    wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标
    wndclass.lpszClassName = szAppName; //类名
    wndclass.cbClsExtra = 0; //类的额外参数
    wndclass.cbWndExtra = 0; //窗口的额外参数.用于基于同一窗口类的窗口各自区分.
    //在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小
    wndclass.lpszMenuName = NULL; //菜单名.可以用作子窗口的id
    wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口风格
    wndclass.lpfnWndProc = WndProc; //窗口过程
    wndclass.hInstance = hInstance; //包含窗口过程的实例句柄
    if( !RegisterClass(&wndclass) ) //注册窗口类
    return 0;
    hwnd = CreateWindow( //创建窗口
    szAppName, //窗口类名
    szAppName, //窗口标题
    WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //窗口风格
    CW_USEDEFAULT, //初始的x坐标
    CW_USEDEFAULT, //初始的y坐标
    480, //初始的宽度
    200, //初始的高度
    NULL, //父窗口
    NULL, //菜单
    hInstance, //和窗口相关的实例句柄
    NULL //额外参数
    );
    ShowWindow( hwnd,nCmdShow ); //显示窗口
    UpdateWindow( hwnd ); //更新窗口
    while( GetMessage(&msg,NULL,0,0) ) //消息循环
    {
    TranslateMessage(&msg); //将WM_XXXKEYXXX消息翻译为WM_CHAR消息
    DispatchMessage(&msg); //传递消息到窗口过程
    }
    return msg.wParam; //返回
    }
    DWORD WINAPI PBThreadProc( LPVOID lpParameter )
    {
    HWND hwndPB = (HWND) lpParameter; //进度条的窗口句柄
    PBRANGE range; //进度条的范围
    SendMessage( hwndPB, PBM_SETRANGE, //设置进度条的范围
    (WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );
    SendMessage( hwndPB, PBM_GETRANGE, //获取进度条的范围
    (WPARAM)TRUE, //TRUE 表示返回值为范围的最小值,FALSE表示返回最大值
    (LPARAM)&range );
    while(TRUE)
    {
    SendMessage( hwndPB, PBM_DELTAPOS, //设置进度条的新位置为当前位置加上范围的1/40
    (WPARAM)((range.iHigh-range.iLow)/40), (LPARAM)0 );
    if( SendMessage( hwndPB, PBM_GETPOS, (WPARAM)0, (LPARAM)0 ) //取得进度条当前位置
    == range.iHigh )
    {
    SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //将进度条复位
    }
    Sleep(1000); //每1秒更新一次进度条
    }
    }
    LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
    {
    static HWND hwndPB;
    switch( message )
    {
    case WM_CREATE:
    {
    InitCommonControls(); //确保已注册了进度条类PROGRESS_CLASS
    hwndPB = CreateWindowEx(
    0,
    PROGRESS_CLASS,
    NULL,
    WS_CHILD | WS_VISIBLE,
    0,0,0,0, //位置和大小在WM_SIZE中设置
    hwnd,
    (HMENU)0,
    ((LPCREATESTRUCT)lParam)->hInstance,
    NULL);
    CreateThread( //操作进度条的线程
    NULL,
    0,
    (LPTHREAD_START_ROUTINE)PBThreadProc,
    hwndPB,
    0,
    0
    );
    return 0;
    }
    case WM_SIZE:
    {
    RECT rc;
    GetClientRect(hwnd, &rc);
    MoveWindow(
    hwndPB,
    rc.left,
    (rc.bottom - rc.top )/4,
    rc.right - rc.left,
    (rc.bottom - rc.top )/10,
    TRUE
    );
    return 0;
    }
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    }
    return DefWindowProc( hwnd,message,wParam,lParam );
    }

    样式的修改

    可以用到资源文件(.rc)
    //
    // SUPPORT FOR WINDOWS XP THEMES:
    // THIS WILL MAKE THE PROGRAM USE THE COMMON CONTROLS
    // LIBRARY VERSION 6.0 (IF IT IS AVAILABLE)
    //
    1 24 "CtrlProgressBar.exe.Manifest"

    添加视频 | 添加图册相关影像

    参考资料
    [1]^引用日期:2018-11-06
    开放分类 我来补充
    常识计算机

    互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于www.baike.com。

    登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。

    互动百科用户登录注册
    此词条还可添加  信息模块

    WIKI热度

    1. 编辑次数:9次 历史版本
    2. 参与编辑人数:6
    3. 最近更新时间:2018-11-07 10:26:34

    相关词条

    互动百科

    扫码下载APP