Индикатор выполнения процесса
Заранее спасибо!
Чтение/парсинг и перерисовку по таймеру. Видимо окну нужно существенное время, чтобы перерисоваться. Если в другом потоке запускать, то таймером станет система, переключающаяся между потоками.
Цитата: Meander
Чтение/парсинг и перерисовку по таймеру. Видимо окну нужно существенное время, чтобы перерисоваться. Если в другом потоке запускать, то таймером станет система, переключающаяся между потоками.
Спасибо, буду пробовать.
Хотя с чего бы такому
Код:
CDialog::OnPaint();
}
// .......... CPaintDC dc(this) .................//
CRect wnd; this->GetClientRect(&wnd);
CRect r(wnd.left, wnd.bottom, wnd.right, wnd.bottom-GetStatusHeight());
CBrush b(GetStatusColor());
dc.SelectObject(&b);
dc.Rectangle(&r);
b.DeleteObject();
dc.SelectObject(&m_statusFont);
dc.SetTextColor(GetStatusTextColor());
dc.SetBkColor(GetStatusColor());
dc.TextOut((INT)(GetStatusHeight()/4),
wnd.bottom-GetStatusHeight()+(INT)(GetStatusHeight()/8),
GetStatusText());
}
}
// .......... CPaintDC dc(this) .................//
CRect wnd; this->GetClientRect(&wnd);
CRect r(wnd.left, wnd.bottom, wnd.right, wnd.bottom-GetStatusHeight());
CBrush b(GetStatusColor());
dc.SelectObject(&b);
dc.Rectangle(&r);
b.DeleteObject();
dc.SelectObject(&m_statusFont);
dc.SetTextColor(GetStatusTextColor());
dc.SetBkColor(GetStatusColor());
dc.TextOut((INT)(GetStatusHeight()/4),
wnd.bottom-GetStatusHeight()+(INT)(GetStatusHeight()/8),
GetStatusText());
}
Думаю, что не коду долго рисоваться, а перерисовка окна стоит последней в очереди событий и ждет, пока не завершится процедура парсинга файла.
Думаю, юзеру не понравится ситуация с помершим интерфейсом, даже если его пытаться успокоить прогрессом. Напрашивается решение с постановкой гуи в поток с добавлением кнопки завершения.
Цитата: sadovoya
Думаю, юзеру не понравится ситуация с помершим интерфейсом, даже если его пытаться успокоить прогрессом. Напрашивается решение с постановкой гуи в поток с добавлением кнопки завершения.
Не, это весьма полезно было бы, тока вся программа бессмысленна без этого парсинга и, если тупой юзер будет постоянно отменять процесс, зачем он ему тогда вообще нужна? Может ему показать сколько времени до конца? Рисовать в цикле, попробую. Жалко только портить замечательный сяшный код мерзким MFC:)
Да, и изящный сяшный код можно поместить в отдельный модуль, а гуевый отделить. Тогда можно повторно использовать. "Разделяй и властвуй" :)