Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите, подайте идею  (Прочитано 11472 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« : 16-03-2011 13:41 » 

Пишу в Visual C++ 6 с использованием MFC.
Пыталась реализовать:
Создано окно, в котором появлется надпись "ЖДИТЕ идёт проверка", выполняется функция проверки.
По окончании проверки появляется кнопка ПОВТОР либо кнопка ОК, написаны ф-ции обработки нажатия этих кнопок. Вызов Ф-ции проверки поместила в InitDialog(), тк другого не придумала.

Получила в результате не то, что хотела. А именно, окно на экране появляется только по окончании ф-ции проверки. Те, вместо того,чтобы спокойно ждать окончания проверки, любуясь на успокаивающую надпись "ЖДИТЕ", я вижу "пустой" экран.

Помогите,чем можИте...  Не понял Краснею
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-03-2011 13:46 » 

Тяжёлые вычисления стоит делать в отдельном потоке, чтобы не "замораживать" интерфейс приложения - в противном случае пользователь ведь может решить, что оно зависло. То же самое рекомендует и сама Microsoft: где-то у них в MSDN были гайдлайны по пользовательскому интерфейсу, где крайне не рекомендовалось "замораживать" контролы и заниматься синхронной обработкой прямо в UI-потоке; и рекомендовалось давать пользователю максимум свободы, вплоть до отмены текущих операций, чтобы он не пугался. Что, впрочем, не мешает самой Microsoft первой же свои рекомендации и нарушать.

Если не смущает "зависание" интерфейса, сопровождающееся надписью в заголовке "программа не отвечает" на время обработки, то её стоит поместить куда-нибудь после InitDialog - в doModal в случае модального (хотя в этом варианте не уверен) или ещё куда-то (например, создать новое пользовательское событие и отправлять его после инициализации самому себе, или реагировать на какое-нибудь стандартное событие).
« Последнее редактирование: 16-03-2011 13:50 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 17-03-2011 08:20 » 

Если не усложнять и если не требуется кнопка отмены, то в InitDialog() вполне сойдёт

Код:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();

//показываем диалог
ShowWindow(SW_SHOW);

//тяжёлые вычисления
Sleep(5000);

//закрываем диалог
CDialog::OnCancel();
//или CDialog::OnOK();
//или EndDialog(IDOK);
//или EndDialog(IDCANCEL);

return TRUE;
}

(не тестировал, могут быть очепятки)
« Последнее редактирование: 17-03-2011 08:21 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 17-03-2011 08:38 » 

Я бы начал с немодального диалога. Показать перед началом вычислений и погасить после.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 17-03-2011 08:49 » 

Да с модальным возни меньше Улыбаюсь А красиво переделать потом можно, когда время будет
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 17-03-2011 08:51 » 

Алексей1153++, тут, если разобраться, делов на 2 минуты: сделать CThread, скормить ему вычисления и послать оттуда сообщение об окончании.

Впрочем, если программа не предназначена для пользователей в принципе, то всё равно, как делать.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 17-03-2011 08:54 » 

Вад, с модалкой таких сложностей совершать не нужно: визардом делаешь диалог, класс к нему. Удаляешь кнопки, пишешь в OnInitDialog(). И всё - Вызов DoModal() и PROFIT
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 17-03-2011 08:58 » 

Да я что, я ничего. Можно ведь и совсем в консольке выполнять - там даже диалог создавать не нужно Улыбаюсь

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

И уже наличие надписи "ЖДИТЕ" как бы намекает, что пользователь, скорее, всё-таки посторонний, и ему чудеса замерзающих на минуту-другую-полчаса приложений могут показаться злыми: ещё побежит к админу жаловаться "у меня программа виснет, чоделать!"
« Последнее редактирование: 17-03-2011 09:00 от Вад » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 17-03-2011 09:03 » 

Самое простое: modeless dialog и песочные часы. Самое идеальное - тред, как Вад говорит.

Лёшик, вот любишь ты поизвращаться. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 17-03-2011 09:09 » 

Неа, я люблю как удобнее мне Улыбаюсь
Записан

ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #10 : 17-03-2011 10:06 » 

Спасибо вам всем.
Попробую все варианты.
Пока пошла по другому пути, чтобы не вносить больших изменений в написанную мною программу.
Сейчас делаю более понятным интерфейс для пользователей(ОТК, метрология, так что совсем посторонние) после предварительной сдачи ПО.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 17-03-2011 10:18 » 

Неа, я люблю как удобнее мне Улыбаюсь

А нужно, чтобы пользователю было удобно. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 17-03-2011 10:48 » 

Пользователю удобно будет ) Всё равно отмены нет - сиди и фтыкай в "ЖДИТЕ" Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines