一段进度条的命令

来源:百度知道 编辑:UC知道 时间:2024/06/08 19:48:42
int CProgressDlg::StepIt()
{
PumpMessages();
int iResult = m_Progress.StepIt();
UpdatePercent(iResult+m_nStep);//m_nStep应该是步长
return iResult;
}

void CProgressDlg::PumpMessages()
{
ASSERT(m_hWnd!=NULL);
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(!IsDialogMessage(&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}

void CProgressDlg::UpdatePercent(int nNewPos)
{
CWnd *pWndPercent = GetDlgItem(CG_IDC_PROGDLG_PERCENT);
int nPercent;
int nDivisor = m_nUpper - m_nLower;
ASSERT(nDivisor>0);
int nDividend = (nNewPos - m_nLower);
ASSERT(nDividend>=0);
nPercent = nDividend * 100 / nDivisor;
if(nPercent!=100) nPercent %= 100;
CString strBuf;
strBuf.Format(_T("%d%c"),nPercent,_T(&

应该不是,StepIt()有效的前提是定义了一个范围和一个步长,然后按照

这个步长不停的更新进度,当前进度=>最大范围时候,然后从新从起点开始

增加,它自己本身不会自动连续前进的,你调用它一次,就会增长一段。

PumpMessages()的作用是处理当前消息队列中的消息,当消息队列里面没有

消息的时候它就会返回(注意,它这里只是处理的当前队列的某一个状态的时

候,可能它返回的时候,消息队列又有消息到来了)。

它的作用是在处理某一个比较费时的任务的时候,我们可以在任务的执行过程

中处理一下消息,避免由于任务的费时,而导致界面无法刷新或者子控件无法

响应消息。