如何让程序执行的时候PROGRESS显示进度条,如何实现
1个回答
2016-06-08
展开全部
详细步骤如下:
前提是你在单文档程序里显示进度条。
一:在CMainFrame类的头文件里定义一个CProgressCtrl类型的成员变量.
二:在CMainFrame类的OnCreate函数中添加如下代码:
m_progress.Create(WS_CHILD | WS_VISIBLE,CRect(100,100,200,120),this,123);
参数:1.进度栏空间类型,WS_CHILD和WS_VISIBLE表示具有子窗口风格并且可见. 2.进度栏的大小和位置,用一个矩形完全可以表示. 3.指定进度栏的父窗口 4.指定进度栏空间的ID,此处随便设定为123。
三:下面我们要让新建的这个进度栏"动起来",即在进度栏以某种方式不断增加当前位置,这可以通过CProgressCtrl类的StepIt成员函数来完成.该函数使进度栏控件的当前位置按照一定的步长前进.至于每次前进的步长则可以通过CProgressCtrl类的另一个成员函数:SetStep来设定。一旦调用这个函数设置了一个步长,随后的StepIt函数就按照这个步长前进。另外,对于进度栏来说,还可以设置它的范围,这可以通过电泳CProgressCtrl类的SetRange这一成员函数来实现。默认情况下,范围的最小值为0,最大值为100。一般来说,应该根据该进度栏所实现的功能来设置它的范围。例如,要实现一个软件的进度控制,则可以根据软件安装的进度来设置进度栏的范围;如果要实现播放影片的进度控制,则可以根据影片的播放时间来设这进度栏的范围。
你可以在响应消息 ON_TIMER 的CMainFrame::OnTimer函数里田间代码使得进度栏动起来,下面是个实例参考,你可以理解一下,就差不多会用了(找关键地方看,其他的你肯定看不懂,因为你不知道具体环境):
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int index=0;
SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
index=++index%3;
CTime t=CTime::GetCurrentTime();
CString str=t.Format("%H:%M:%S");
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);
// m_progress.SetRange(0,50);
m_progress.StepIt();
CFrameWnd::OnTimer(nIDEvent);
}
四:最后要注意的是 要刷新窗口再画
前提是你在单文档程序里显示进度条。
一:在CMainFrame类的头文件里定义一个CProgressCtrl类型的成员变量.
二:在CMainFrame类的OnCreate函数中添加如下代码:
m_progress.Create(WS_CHILD | WS_VISIBLE,CRect(100,100,200,120),this,123);
参数:1.进度栏空间类型,WS_CHILD和WS_VISIBLE表示具有子窗口风格并且可见. 2.进度栏的大小和位置,用一个矩形完全可以表示. 3.指定进度栏的父窗口 4.指定进度栏空间的ID,此处随便设定为123。
三:下面我们要让新建的这个进度栏"动起来",即在进度栏以某种方式不断增加当前位置,这可以通过CProgressCtrl类的StepIt成员函数来完成.该函数使进度栏控件的当前位置按照一定的步长前进.至于每次前进的步长则可以通过CProgressCtrl类的另一个成员函数:SetStep来设定。一旦调用这个函数设置了一个步长,随后的StepIt函数就按照这个步长前进。另外,对于进度栏来说,还可以设置它的范围,这可以通过电泳CProgressCtrl类的SetRange这一成员函数来实现。默认情况下,范围的最小值为0,最大值为100。一般来说,应该根据该进度栏所实现的功能来设置它的范围。例如,要实现一个软件的进度控制,则可以根据软件安装的进度来设置进度栏的范围;如果要实现播放影片的进度控制,则可以根据影片的播放时间来设这进度栏的范围。
你可以在响应消息 ON_TIMER 的CMainFrame::OnTimer函数里田间代码使得进度栏动起来,下面是个实例参考,你可以理解一下,就差不多会用了(找关键地方看,其他的你肯定看不懂,因为你不知道具体环境):
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int index=0;
SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
index=++index%3;
CTime t=CTime::GetCurrentTime();
CString str=t.Format("%H:%M:%S");
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);
// m_progress.SetRange(0,50);
m_progress.StepIt();
CFrameWnd::OnTimer(nIDEvent);
}
四:最后要注意的是 要刷新窗口再画
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询