2021-09-05 11:24:31

进度条 免费编辑 添加义项名

B 添加义项
?
义项指多义词的不同概念,如李娜的义项:网球运动员、歌手等;非诚勿扰的义项:冯小刚执导电影、江苏卫视交友节目等。 查看详细规范>>
所属类别 :
生活日用品
生活日用品
编辑分类

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

基本信息

  • 中文名称

    进度条

  • 外文名称

    progress bar

  • 作用

    以图片形式显示处理任务的速度

  • 形状

    长方形

  • 运行时间段

    计算机处理任务时

折叠 编辑本段 历史

在数字运算机发明之前,就已经有了进度条的概念。1896 年,Karol Adamiecki(波兰人;经济学家,工程师和管理研究人员),发明了一种叫做harmonogram(波兰语,时间表)的图表;1903年,他的理论在俄罗斯技术界引起了轰动。他在波兰杂志《 Przegląd Techniczny 》发表了一些文章(1909)。 1931年,他发表了一篇更广为人知的文章《armonogram or harmonograf.》(波兰语,日程或时间表),描述他的图。Adamiecki只是在波兰和俄罗斯发表这些文章,较少被英语国家了解。

同一时间,亨利·甘特(Henry Gantt)提出类似的方法已在西方普及,他在1910年和1915年都发表过文章。算是以讹传讹吧,Adamiecki的图表就被叫做为甘特图。这个概念后来被用于计算领域。

折叠 编辑本段 处理方法

以文件处理为例

单个文件的进度处理方法:

使用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"

阅读全文

热点资讯