Добавлено: 23 дек 2004, 11:46
pominub, на будущее - пользуйся тегами code и /code (ессно, в квадратных скобках) для выделения кода - plain text тяжело читать.
По вопросу тебе совершенно верно ответили на форуме. На всякий случай повторю, для ленивых
: при нажатии на кнопку ты сразу пытаешься прочитать весь файл в цикле while(File.ReadString(str)!=FALSE). При этом никакие сообщения Windows не обрабатываются, в т.ч. и таймерные. Если же добавить вызов AfxMessageBox(), то создается модальное диалоговое окно со своим циклом сообщений, в котором и обрабатываются таймерные сообщения.
Вот пример как следовало бы сделать:
По вопросу тебе совершенно верно ответили на форуме. На всякий случай повторю, для ленивых

Вот пример как следовало бы сделать:
Код: Выделить всё
void CMy1Dlg::OnButton1()
{
// Заблокирум кнопку пока читаем из файла
m_ReadBtn.EnableWindow(FALSE);
// Открываем файл в режиме 'текстовый/только_на_чтение/разделяемый доступ'
// Режим 'разделяемый доступ' (CFile::shareDenyNone) позволяет 2 копиям
// программы одновременно работать с одним файлом.
m_pFile.Open("readme.txt", CFile::modeRead|CFile::typeText|CFile::shareDenyNone);
// Запускаем таймер.
SetTimer(ID_TIMER, m_Timeout, NULL);
}
void CMy1Dlg::OnTimer(UINT nIDEvent)
{
CString s;
// Остановим таймер
KillTimer(ID_TIMER);
// Читаем очередную строку
if (m_pFile.ReadString(s))
{
// и добавляем ее в список
m_List.AddString((LPCTSTR) s);
// Задаем новый таймаут (здесь для примера - инкрементом)
// и перезапускаем таймер.
SetTimer(ID_TIMER, (m_Timeout+=1000), NULL);
}
// Достигли конца файла
else
{
// Закрываем файл
m_pFile.Close();
// и разблокируем кнопку
m_ReadBtn.EnableWindow(TRUE);
}
// Вызов стандартного обработчика родительского класса
CDialog::OnTimer(nIDEvent);
}