读书人

怎么编写正宗的进度条

发布时间: 2012-08-11 20:50:31 作者: rapoo

如何编写正宗的进度条?
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消息的时候获取当前已经拷贝了多少字节,然后除一下得个百分比,然后再用进度条长度乘以百分比不就得到当前的长度了么

读书人网 >VC/MFC

热点推荐