Как показать ProgressBar на StatusBar

Предположим, что вы хотите показать CProgressCtrl на весь StatusBar. Для этого необходимо проделать следующее: - Выберите пункт меню View - Resource Symbols. Нажмите кнопку New и добавьте новое имя, в нашем примере это будет ID_PROGRBAR. - В файле MainFrm.cpp найдите объявление массива indicators (он находиться сразу после END_MESSAGE_MAP) и отредактируйте его к следующиему виду
static UINT indicators[] =
{
ID_PROGRBAR
};
- В файле _MainFrm.h создайте protected переменную m_bCreated типа BOOL и public переменную m_progress типа CProgressCtl. - В файле MainFrm.cpp отредактируйте конец функции int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) таким образом: к участку кода:
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof (UINT)))
{
TRACE0("Failed to create status bar\n" );
return -1; // fail to create
}
добавьте следующую строку:
else {
m_wndStatusBar.SetPaneInfo(0,ID_PROGRBAR,SBPS_STRETCH,10);
}
Кроме того, добавьте инициализацию нашей переменной m_bCreated
.........
m_bCreated=FALSE;
..........
- Теперь мы можем использовать ProgressBar в строке статуса, естественно не забыв создать этот объект. Предположим, у нас есть функция CMainFrame::OnWork(). Она будет выглядеть примерно так:
void CMainFrame::OnWork()
{
RECT rc;
m_wndStatusBar.GetItemRect(0,&rc);
if (m_bCreated==FALSE)
{
// создаем m_progress
m_progress.Create(WS_VISIBLE|WS_CHILD, rc,&m_wndStatusBar, 1);
// Устанавливаем размер от 0 до 100
m_progress.SetRange(0,100);
m_progress.SetStep(1);
m_bCreated=TRUE;
}
for (int I = 0; I < 100; I++)
{
Sleep(20);
m_progress.StepIt();
}
}
-Если откомпилировать проект на этой фазе, то все будет работать, но при изменении размера окна линейка ProgressBar'а размеры менять не будет, поэтому необходимо перекрыть событие OnSize:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if (m_bCreated)
{
RECT rc;
m_wndStatusBar.GetItemRect(0,&rc);
m_progress.SetWindowPos(&wndTop, rc.left, rc.top,
rc.right - rc.left,rc.bottom - rc.top, 0);
}
}
- Вот теперь все. Откомпилируйте проект и убедитесь, что все работает.