如何编写正宗的进度条?
void CMyDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CFile objFile;
objFile.Open("I:\\_work\\_MyProjects\\控制进度条增长和停止\\出师表.txt",
CFile::modeRead,NULL);
UINT nCount = objFile.SeekToEnd();
static int nEachTime = 10;
FLOAT fPos = FLOAT(nEachTime) / FLOAT(nCount) * 1000;
if (nEachTime <= nCount)
{
m_progressbar.SetPos(fPos);
nEachTime += 10;
}
::CopyFile("I:\\_work\\_MyProjects\\控制进度条增长和停止\\出师表.txt",
"C:\\出师表.txt", FALSE);
CDialog::OnTimer(nIDEvent);
}
在对话框中给确定按钮加入了消息响应函数onok(),在OnInitDialog()中加了个setrange()和settimer().
这是我写的进度条,看上去也动,但是我感觉这么些太赖皮了,是个假象,窗口绘制的时候相应wm_timer消息,进度条就开始动了,但是这个时候还没拷贝文件.后来拷贝完了,进度条还在动,而且又拷贝文件一次.
我希望是通过拷贝到目标文件的字节数占源文件字节数的"比例"来控制进度条的位置,但是这拷贝好像是一瞬间的事情,如何获得这个比例呢?
正宗的进度条一般如何做啊?
[解决办法]
你自己都说出方法啦.
拷贝到目标文件的字节数占源文件字节数的"比例"来控制进度条的位置 这是你的要求阿,照这个做不就完了
在初始化的时候把要拷贝的总字节数计算出来,把进度条长度取出来准备好
每次响应OnTimer消息的时候获取当前已经拷贝了多少字节,然后除一下得个百分比,然后再用进度条长度乘以百分比不就得到当前的长度了么