我想知道vc加进度条的原理和代码

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:57:37
在我的代码执行过程中,有一个很大的循环,时间太长,
我想加个进度条显示剩余时间,如何加啊?
以循环开始为起点,以循环结束为终点。

哪位达人给我说下原理和方法啊!

如果是一个对话框:
那就比较简单,在资源编辑器中,加上一个进度条控件。
然后,为这个对话框类中添加控件变量(绑定到这个进度条的),假设名字
是m_pro;

那么,在实用进度条之前,先设置它的范围:m_pro.SetRang( 最小, 最大);设置它一次步进多少,m_pro.SetStep( 步进值 );设置它的当前进度值m_pro.SetPos( 当前进度值 ),然后实用的时候,可以直接实用SetPos设置值,也可以用m_pro.StepIt()来步进一步。

如果是个Windows窗口(不是对话框),那就比较复杂一些。先Create,然后SendMessage,还是和对话框那些操作一样,就是把函数调用换成SendMessage了。

-------------------------------------------------------

如果要在一个大的循环里面实用进度条:
因为SetRang的参数是一个short型。所以,如果你的循环次数太多,超过2^16,那就要做一下处理了。

1、首先计算你这次循环需要多少次。
2、确定进度条范围,假设就设置为100。
3、用总循环次数除以100,得到运行多少次步进一下。
4、循环结束好直接SetPos到100.(因为次数除以100可能有剩余)

如果循环代码在工作线程中可以在线程中传递进度条所在的窗口句柄,在循环体中按一定间隔计算下循环进度,并PostMessage出去给进度条更新显示.

首先在你的循环开始之前添加一些初始化语句:
m_progress.SetRange(0,100);//具体后面的数自己确定,比如说100次循环
m_progress.SetPos(0);
m_progress.SetStep(1);
m_progress是进度条关联的成员变量。

然后在你的循环里面里面添加:
m_progress.StepIt();
每执行一次让他前进一下就行了。

具体原理是这样,如果循环很大的话,也可以考虑几次循