Визуальное программирование и MFC

       

Дополнительные возможности панели состояния


Если во время работы приложения выполняется какой-либо длительный процесс, то в панели состояния можно вывести линейный индикатор progress bar, чтобы показать ход данного процесса.

Методика размещения полосы progress bar достаточно проста. В тот момент, когда понадобится вывести полосу progress bar, просто нужно создать ее, указав в качестве родительского окна панель состояния. Координаты линейного индикатора желательно выбрать так, чтобы он отображался на месте одного из индикаторов (например, на месте индикатора с идентификатором ID_INDICATOR_PRBAR). Предварительно можно убрать рамку с этого индикатора и заблокировать его так, чтобы в нем не отображался текст.

Предположим, что при выборе пользователем пункта меню необходимо выполнить какой-либо длительный процесс. Тогда метод-обработчик сообщения от пункта меню может выглядеть следующим образом:

void CMainFrame::OnItemMenu() { // получаем индекс индикатора ID_INDICATOR_PRBAR int index=m_wndStatusBar.CommandToIndex(ID_INDICATOR_PRBAR);

// устанавливаем характеристики индикатора ID_INDICATOR_PRBAR m_wndStatusBar.SetPaneInfo(index,ID_INDICATOR_PRBAR, SBPS_DISABLED|SBPS_NOBORDERS,150);

// определяем координаты индикатора ID_INDICATOR_PRBAR RECT r; m_wndStatusBar.GetItemRect(index,&r);

// создаем линейный индикатор CProgressCtrl progress; if(!progress.Create(WS_CHILD|WS_VISIBLE,r,&m_wndStatusBar,1)) return;

// устанавливаем границы для линейного индикатора progress.SetRange(0,100);

// устанавливаем шаг приращения для линейного индикатора progress.SetStep(1);

// плавно увеличиваем положение линейного индикатора for(int i=0; i<100; i++) { Sleep(10); // здесь можно выполнять действия

// выполняем шаг приращения линейного индикатора progress.StepIt(); }

// отображаем текст в самом первом индикаторе m_wndStatusBar.SetWindowText("Progress completed"); }



Содержание раздела