Как отобразить индикатор прогресса на строке состояния?
Опубликовано: 25.06.2001
Исправлено: 13.03.2005
Версия текста: 1.0
Чтобы решить эту задачу, достаточно вспомнить, что строка состояния - это самое обыкновенное окно, на котором можно создавать дочерние окна. В данном случае нам потребуется создать контрол типа progress bar, задав для него стиль WS_CHILD и строку состояния в качестве родительского окна. Когда индикатор прогресса создан, мы работаем с ним, а затем уничтожаем его.
Следующий фрагмент демонстрирует создание индикатора прогресса на строке состояния.
CMainFrame *pFrame = dynamic_cast<CMainFrame *>(AfxGetMainWnd());
CStatusBar &sb = pFrame->m_wndStatusBar;
CRect rect;
sb.GetItemRect(0, rect);
CProgressCtrl pc;
pc.Create(WS_CHILD | WS_VISIBLE, rect, &sb, 0);
pc.SetRange(0, 100);
pc.SetPos(0);
pc.SetStep(1);
for(int i=0; i<100; i++)
{
Sleep(30);
pc.StepIt();
}
pc.DestroyWindow();
|
В этом фрагменте используется приведение типов с помощью dynamic_cast. Этот оператор в свою очередь использует механизм RTTI (информацию о типах на этапе выполнения). Поэтому необходимо включить поддержку RTTI, чтобы приведённый фрагмент мог работать в вашей программе. Поддержка RTTI включается, если задать компилятору ключ /GR. В настройках проекта (Project->Settings) ему соответствует настройка Enable Run-Time Type Information (RTTI) (вкладка C/C++, категория C++ Language). |
Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы
то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских
прав.