Очень нужна помощь неопытному
От: Igor_D  
Дата: 30.06.02 16:21
Оценка:
Понадобилось написать написать прикладную программу на VC, а я только
приступил к MFC. Помогите, кто может.
Выполняется некоторое действие (например, чтение файла и вывод его через COM).
При этом появляется диалоговое окно с Progress'ом. Вопрос в следующем:
Нужно, чтобы при нормальном окончании процесса окно закрылось само,
но также нужно иметь возможность остановить процесс нажатием какого-либо
Button, либо Escape. Вот функция. Цикл внутри сделан условно для простоты
и наглядности. Что нужно всунуть в него, чтобы знать, был ли нажат
Button "Cancel" или другой, или Escape. Или это вообще делается иначе?

void CProgressDlg::MyReadFileOutCom()
{
int i;
for ( i=0; i<NuberBytesInFile; i++)
{
m_Progress.SetPos(i);
//прочитали
//вывели
}
CProgressDlg::EndDialog(IDOK); // правильно ли так?
}
Re: Очень нужна помощь неопытному
От: Afx  
Дата: 01.07.02 04:27
Оценка:
Здравствуйте Igor_D, Вы писали:


ID>Понадобилось написать написать прикладную программу на VC, а я только

ID>приступил к MFC. Помогите, кто может.
ID>Выполняется некоторое действие (например, чтение файла и вывод его через COM).
ID>При этом появляется диалоговое окно с Progress'ом. Вопрос в следующем:
ID>Нужно, чтобы при нормальном окончании процесса окно закрылось само,
ID>но также нужно иметь возможность остановить процесс нажатием какого-либо
ID>Button, либо Escape. Вот функция. Цикл внутри сделан условно для простоты
ID>и наглядности. Что нужно всунуть в него, чтобы знать, был ли нажат
ID>Button "Cancel" или другой, или Escape. Или это вообще делается иначе?

ID>void CProgressDlg::MyReadFileOutCom()

ID>{
ID> int i;
ID> for ( i=0; i<NuberBytesInFile; i++)
ID> {
ID> m_Progress.SetPos(i);
ID> //прочитали
ID> //вывели
ID> }
ID> CProgressDlg::EndDialog(IDOK); // правильно ли так?
ID>}

ID>


Это делается так: создаешь обработчики события нажатия на кнопку "Cancel" в твоем диалоге. При входе в метод void CProgressDlg::MyReadFileOutCom() перед циклом устанавливаешь флаг (например, некоторую булевскую переменную, член класса CProgressDlg) в истину. Это для того, чтобы при нажатии на отмену знать, что идет цикл. А в самом цикле тогда надо будет организовать обработку очереди сообщений. Выгдядеть это будет примерно так:

void CProgressDlg::MyReadFileOutCom()
{
.....
....
MSG msg;
for (int i=0; i<NuberBytesInFile; i++)
{
m_Progress.SetPos(i);
//прочитали
//вывели
if (PeekMessage( &msg, NULL, NULL, NULL, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.