在窗口的状态栏中添加一个进度条,在实际的开发中有的需要在状态栏添加进度条来显示窗口加载的快慢。
创建一个单文档工程将其命名为Progress
从CStatusBar类派生出CProgressStatusBar给他添加如下成员m_Progress
并添加内联函数:
CProgressCtrl& GetProgressCtrl()
{
return m_Progress;
};
然后重载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);
}
在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);
}
程序运行效果如下图:状态栏出现进度条。