Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть окно через заданное время, помогите, торможу..... 
:(
    Опции темы
АлексейМ
  Дата 18.12.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Народ, у мя такой вот вроде бы совсем несложный вопросик. Нужно через заданное в EditBox время закрывать диалоговое окно проги. Предполагаю, что можно это сделать с помощью цикла и функции SetTimer. Например, в поле вводим время в минутах. Тогда параметрами таймера могут быть SetTimer(1, 60000, NULL). Переменной цикла присваиваем значение из поля ввода. Одна минута - цикл повторяется один раз, две минуты - два и т.д. Только вот как сделать, чтобы окно закрывалось при окончании цикла?
Вот, у меня был вариант, но он по понятным причинам не работает. А другой чёт не допирает, как сделать...

Код

void CWindowDlg::OnStart() // Включаем таймер кнопочкой Старт
{
    // TODO: Add your control notification handler code here

    int tmr;               // таймер
    int cycletime;      // переменная цикла
    int time;             // заданное время:
    time = m_time;  // m_time - переменная поля типа int
    

    cycletime = 0;

    while(cycletime <= time)
    {
        tmr = SetTimer(1, 60000, NULL);
        cycletime++;
    } 
}

void CWindowDlg::OnTimer(UINT nIDEvent) 
{
    // TODO: Add your message handler code here and/or call default

    CDialog::OnTimer(nIDEvent);
                    
                    OnCancel(); // закрываем окно
/* В этом-то вся проблема и заключается. OnTimer срабатывает каждый раз при прохождении цикла,
 поэтому окно закрывается через минуту. Как сделать, чтобы окно закрывалось по окончании цикла?
Какие ещё глюки вы здесь видите? Помогите исправить :))                                          */
}

Заранее благодарю. smile
PM MAIL   Вверх
Aleksandor
Дата 18.12.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: нет
Всего: 12



Ну например можно по окончании цикла послать окну сообщение, а в обработчике сообщения убить таймер и закрыть окно. Сообщение типа SendMessage(hDlg,WM_APP+1,0,0);
Обработчик
case WM_APP+1:

KillTimer(hDlg,1);
EndDialog(hDlg,TRUE);
return TRUE;


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
АлексейМ
Дата 18.12.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Aleksandor, будь добр, укажи, куды в моём коде всё это дело вставлять. Спасиба!
PM MAIL   Вверх
SergeCpp
Дата 19.12.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



А зачем цикл-то ?

Ставишь таймер сразу на сколько надо...

Ведь твой цикл — не задержка!

Он мгновенно выполняется!

PM MAIL WWW ICQ   Вверх
АлексейМ
Дата 20.12.2005, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



SergeCpp, вишь, в чём дело - мне надо, чтобы в моей проге ПОЛЬЗОВАТЕЛЬ мог задавать время, через которое окно будет закрываться, открываться, выдавать какое-нить сообщение или производить любую другую операцию. Например, хочешь задать программке, чтобы через десять минут она включила те какой-нить музончик, а потом вдруг передумал, и захотел, чтобы она включила музон через полчаса. Если каким-то макаром реализовать то, что я хочу, то это сделать будет очень просто. А если предложенным тобой способом, то, чтобы изменить время, надо будет изменять исходник и перекомпилировать... Согласись, эт не очень удобно.
Цитата
Ведь твой цикл — не задержка!

Он мгновенно выполняется!

Вот в этом-то вся проблема...

Может, сделать какую-нить функцию, которая будет до определённого момента считать поступившие сигналы таймера? Опять же, не представляю, как это можно реализовать...
У кого есть идеи? давайте их сюды! smile

PM MAIL   Вверх
SergeCpp
Дата 20.12.2005, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Не понял...

tmr = SetTimer(1, 60000 * cycletime, NULL);

В чём тут сложности ?

==================================
Или уж делай static в таймерном обработчике

И её увеличивай (уменьшай)

PM MAIL WWW ICQ   Вверх
АлексейМ
Дата 20.12.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо большое!
Просто я ещё новичок, и не знал, что в таймере умножение можно ставить. smile
Ща попробую!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.