C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как показать ProgressBar на StatusBar ? / StatusBar / Элементы управления

Как показать 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);
    }
}
- Вот теперь все. Откомпилируйте проект и убедитесь, что все работает.