我有多个进度条,点击第一个按钮时:
void CTDnDlg::OnBtn1()
{
for(int i=0;i<=100;i++)
{
PeekAndPump();
m_MyProgress1.SetPos(i);
}
}
BOOL PeekAndPump()
{
static MSG msg;
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!AfxGetApp()->PumpMessage()){
::PostQuitMessage(0);
return FALSE;
}
}
return TRUE;
}
进度条正常显示。
点击第二个按钮时,想让两个进度条一起显示,
void CTDnDlg::OnBtn2()
{
for(int i=0;i<=100;i++)
{
PeekAndPump();
m_MyProgress2.SetPos(i);
}
}可是我点了第二个按钮,第二个进度条正常显示,第一个停止了。这个怎么解决?
void CTDnDlg::OnBtn1()
{
for(int i=0;i<=100;i++)
{
PeekAndPump();
m_MyProgress1.SetPos(i);
}
}
BOOL PeekAndPump()
{
static MSG msg;
while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!AfxGetApp()->PumpMessage()){
::PostQuitMessage(0);
return FALSE;
}
}
return TRUE;
}
进度条正常显示。
点击第二个按钮时,想让两个进度条一起显示,
void CTDnDlg::OnBtn2()
{
for(int i=0;i<=100;i++)
{
PeekAndPump();
m_MyProgress2.SetPos(i);
}
}可是我点了第二个按钮,第二个进度条正常显示,第一个停止了。这个怎么解决?
解决方法是:PumpMessage不能解决问题,应该在点击不同按钮时启动不同的定时器,每个定时器负责更新一个进度条状态,这样才能三个进度条同时发生变化。
void CTDnDlg::OnBtn1()
{
Increment1 = 1;
while (Increment1 + Increment2 != 0)
{
PeekAndPump();
if (Increment1 != 0 && Pos1 <= 100) m_MyProgress1.SetPos(Pos1);
if (Increment2 != 0 && Pos2 <= 100) m_MyProgress2.SetPos(Pos2);
if (Pos1 >= 100) Increment1 = 0;
if (Pos2 >= 100) Increment2 = 0;
}
}
void CTDnDlg::OnBtn2()
{
Increment2 = 1;
}
void CTDnDlg::OnBtn1()
{
Increment1 = 1;
while (Increment1 + Increment2 != 0)
{
PeekAndPump();
if (Increment1 != 0 && Pos1 <= 100) m_MyProgress1.SetPos(Pos1);
if (Increment2 != 0 && Pos2 <= 100) m_MyProgress2.SetPos(Pos2);
Pos1 += Increment1;
Pos2 += Increment2;
if (Pos1 >= 100) Increment1 = 0;
if (Pos2 >= 100) Increment2 = 0;
}
}
void CTDnDlg::OnBtn2()
{
Increment2 = 1;
}
可以考虑使用计时器,安装计时器,响应时间消息,达到你想要的效果
settimer