MFC应用实例:[15]状态栏添加进度条
1、创建一个单文档工程将其命名为Progress
![MFC应用实例:[15]状态栏添加进度条](https://exp-picture.cdn.bcebos.com/92dd32f7dfb2dc19550cb2a895def4dca13910b4.jpg)
2、从CStatusBar类派生出CProgressStatusBar给他添加如下成员m_Progress
并添加内联函数:
CProgressCtrl& GetProgressCtrl()
{
return m_Progress;
};
![MFC应用实例:[15]状态栏添加进度条](https://exp-picture.cdn.bcebos.com/1f9feadca039131f6fcc3a6ae275f2c4ed990ab4.jpg)
3、然后重载CStatusBar类的两个重要成员函数OnCreate(),OnSize()
并添加一下代码:
int CProgressStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
VERIFY(CStatusBar::OnCreate(lpCreateStruct) ==0 );
VERIFY(m_Progress.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, IDC_PROGRESS));
return 0;
}
void CProgressStatusBar::OnSize(UINT nType, int cx, int cy)
{
CStatusBar::OnSize(nType, cx, cy);
CRect rect;
GetItemRect(1, &rect);
m_Progress.MoveWindow(rect);
}
![MFC应用实例:[15]状态栏添加进度条](https://exp-picture.cdn.bcebos.com/f385f29959430401e0def7f1d66b04d1482905b4.jpg)
4、在CMainFrame的OnCreate()函数中添加一个计时器代码如下:
SetTimer(1,100,NULL);
并添加WM_TIMER消息函数,该消息的处理函数如下:
void CMainFrame::OnTimer(UINT nIDEvent)
{
int nLower,nUpper;
m_wndStatusBar.GetProgressCtrl().GetRange(nLower,nUpper);
if(m_Pos>=nUpper)
m_Pos=0;
m_wndStatusBar.GetProgressCtrl().SetPos(m_Pos);
m_Pos+=1;
CFrameWnd::OnTimer(nIDEvent);
}
![MFC应用实例:[15]状态栏添加进度条](https://exp-picture.cdn.bcebos.com/486884883913e8e55cce440f352f477047187db4.jpg)
5、程序运行效果如下图:状态栏出现进度条。
![MFC应用实例:[15]状态栏添加进度条](https://exp-picture.cdn.bcebos.com/acfda02f477046186afa0d88b08602214e5776b4.jpg)