想问大家个问题
CMyDlg::m_iProgress; //CMyDlg的成员变量CMyDlg::OnBtn()
{
SetTimer(1,1,NULL);
do{ //循环
m_iProgress++;
}
while(m_iProgress<100);
}CMyDlg::OnTimer()
{
m_pro.SetPos(m_iProgrss);
}程序是这样 怎么感觉在OnBtn的do while循环之中,OnTimer函数为什么进不去,实现不了进度条循序而进效果
CMyDlg::m_iProgress; //CMyDlg的成员变量CMyDlg::OnBtn()
{
SetTimer(1,1,NULL);
do{ //循环
m_iProgress++;
}
while(m_iProgress<100);
}CMyDlg::OnTimer()
{
m_pro.SetPos(m_iProgrss);
}程序是这样 怎么感觉在OnBtn的do while循环之中,OnTimer函数为什么进不去,实现不了进度条循序而进效果
{
SetTimer(1,1,NULL);
// 不要用1, 1是1毫秒,1000才是1秒
} CMyDlg::OnTimer()
{
if ( m_iProgress < 100)
m_iProgress++;
m_pro.SetPos(m_iProgrss);
}
else
{
KillTimer(1);
}
}
我感觉和时间没有关系 不管多少都在do while 没有结束的时候 进不去OnTime
还有m_iProgress有没有赋初值?
另外,可能循环体执行完也不用1毫秒,就导致进度条一下就到100了。试一下在循环体里增加sleep,看有没有效果?
m_iProgress++;
}
while(m_iProgress <100); 关键是在这里,你这里循环100次连1ms都用不了,你让1ms后怎么响应你的OnTimer呢?在循环中加入一个Sleep(100);或者更长时间,才能有可能看到,不过Sleep了之后又会造成消息队列阻塞,也看不到OnTimer响应了,
只有把循环递加放到线程中去,并且每加一次要适当的Sleep一下.
在::OnTimer() 函数里面进度条多进一部分
代码可以这么改,进度条满后,重新开始
#define nStep 2 //每秒步长
CMyDlg::OnBtn()
{
SetTimer(1,1000,NULL); } CMyDlg::OnTimer()
{
m_iProgress = (m_iProgress + nStep) %100;
m_pro.SetPos(m_iProgrss);
}