Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Закрытие модального окна


Автор: Феликс 5.7.2007, 23:27
Код

    CLogoDlg* mLogo = new (CLogoDlg);
    if(mLogo->DoModal() == IDOK) {
        Sleep(1000);
        mLogo->DestroyWindow();
    }
    delete mLogo;


В чём моя ощибка? Окно просто навсего нехочет закрываться по истечению одной секунды!
Заранее спасибо!

Автор: Fazil6 5.7.2007, 23:49
на то оно и модальное, что пока его не закроешь дальше выполнение не идет
Код

mLogo->DoModal() == IDOK   // тут стоим пока окно не закроется

так что 
Код

Sleep(1000);
mLogo->DestroyWindow();

не выполняется как ты предполагаешь

Автор: Феликс 6.7.2007, 09:03
Цитата(Fazil6 @ 5.7.2007,  23:49)
Код

mLogo->DoModal() == IDOK   // тут стоим пока окно не закроется

Понятное дело что стоим! Вопрос был как его закрыть по истечению времени!
Задача состоит в том что есть диалоговое окно на которой кнопка, да да та самая обыкновеная кнопка =ъ.
При нажатии по кнопке, диалоговое окно сворачивается в трэй, а на его месте появляется модальное окно, которое по истечению заданого времени закрывается.
Вроде просто! Тока проблема в том что не получается закрыть.

Автор: Earnest 6.7.2007, 09:43
Только изнутри (т.е. из кода самого диалога), т.к. поток управления не выходит за пределы DoModal, пока он не завершится (модальный цикл). Теоретически можно прервать модальный цикл из другого потока, но это как-то проктологически. А изнутри - легко: 
При инициализации  (OnInitDialog) ставишь таймер на сколько тебе надо.
Пишешь обработчик таймера, в котором закрываешь диалог (EndDialog) не забыв предварительно убить таймер.

Автор: Феликс 6.7.2007, 15:01
Спасибо! Проблема решена!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)