Как сделать, чтобы диалог не закрывался при нажатии пользователем Enter или Esc?
Для начала разберёмся, почему диалог закрывается, даже если убрать кнопки OK и Cancel. CDialog имеет две специальных виртуальных функции, OnOK() и OnCancel(), которые вызываются когда пользователь нажимает клавиши Enter или Esc соответственно. CDialog содержит функцию EndDialog(), которая собственно и закрывает диалог.
Так как она относится к функциям специального назначения, то она не присуствует в диалоговой секции BEGIN_MESSAGE_MAP/END_MESSAGE_MAP, и должна быть переопределена по-другому, в отличие от обычных обработчиков нажатия на кнопки. Если у Вас есть кнопки с идентификаторами IDOK и IDCANCEL, то можно воспользоваться Визардом (ClassWizard) для добавления обработчиков BN_CLICKED для этих кнопок, и они будут делать необходимые действия для OnOK() и OnCancel(). Если у Вас нет кнопок с этими ID, то можно вручную добавить эти виртуальные функции. В заголовочном файле диалогового класса:
А если в разные стороны повернуть? 🤫 #юмор #авто #shorts
class CMyDialog : public CDialog
// .
// Generated message map functions
//
virtual void OnOK();
virtual void OnCancel();
//>>AFX_MSG
DECLARE_MESSAGE_MAP()
>;
А затем в соответствующем .CPP файле:
void CMyDialog::OnOK()
>
void CMyDialog::OnCancel()
>
Теперь обработчики не будут вызывать EndDialog() и, соответственно диалог не будет закрываться.
Источник: www.cyberguru.ru
Автоматический выход из программы
Здраствуйте подскажи как закончить написание батника чтоб после завершения обработки программа автоматически закрывалась (смысл такой написал батник чтоб он запускал 1с как пользователь и автоматически выполнял обработку все работает по после выполнения обработки программа остается открытой как сделать так чтоб она после выполнения обработки завершала работу автоматически)
активный пользователь
Дата регистрации: 18.02.2002
Сообщений: 20889
29.08.2011 10:15
В обработке сделать выход из системы.
читатель
Дата регистрации: 23.12.2010
Сообщений: 1333
29.08.2011 10:21
shogun1988
читатель
Дата регистрации: 31.05.2011
Сообщений: 21
29.08.2011 10:25
выходит окно завершение работы с выбором да / нет
активный пользователь
Дата регистрации: 18.02.2002
Сообщений: 20889
29.08.2011 10:26
В настройках пользователя сними галочку запрашивать потверждение.
читатель
Дата регистрации: 23.12.2010
Сообщений: 1333
29.08.2011 10:27
ЗавершитьРаботуСистемы (Exit)
Синтаксис:
ЗавершитьРаботуСистемы(, , )
Параметры:
(необязательный)
Тип: Булево.
Если Ложь, то завершение работы программы будет выполнено безусловно (не зависимо от наличия редактируемых данных).
Если значение параметра Истина, то будут вызываться обработчики закрытия для каждой открытой формы и для всего приложения. Для редакторов текстов, табличных документов и HTML-документов будет произведен анализ модифицированности. Если нет факторов, препятствующих закрытию (например, данные модифицированы и не сохранены), то выполняется завершение работы. В противном случае (такие данные есть) будет выдан вопрос о необходимости сохранения документов.
Командная строка закрывается после выполнения команды (Решение)
Значение по умолчанию: Истина
Читайте синтаксис помощник!
Источник: buh.ru
консольное приложение — C ++ Способы завершения работы программы
Прежде чем вы начнете тратить на меня свое время, имейте в виду, что этот вопрос больше касается вопроса о том, достаточно ли законно это отключение.
Я прочитал все виды способов закрыть программу. Я ЗНАЮ, что всегда лучше закрыть программу, в конце! Итак, как я уже сказал, я читал все виды тем, но я не мог найти ту, которую я правильно понял. Так что я вроде придумал свой путь. Я просто хочу убедиться, что это хороший метод.
int main() < cout > return 0; >
Поэтому я хочу, чтобы вы сосредоточились на цикле while. Это мой метод.
void commands() < cin >> command; if (command == «help») < cout section—-» else if (command == «exit») < running = 0; >else < cout >
И это моя командная функция. Как вы видите, это меняет «ход» на 0 (или ложь). Я надеюсь, что сделал это достаточно понятным.
РЕДАКТИРОВАТЬ: Все, что я хочу знать, если это хороший метод
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Хорошо! Я изменил «выход (0);» «вернуть (0);». Так что я думаю, что это хороший метод! Спасибо за вашу помощь!
Решение
С помощью exit() в программе легально. Хотя это вообще плохая идея. Но если программа застряла без возврата по какой-то странной причине, вы можете это сделать.
С помощью exit в main() это грубо: я просто не могу думать о здравом рассудке, чтобы не использовать взамен взамен.
Разница между выходом () и возвратом из основного состоит в том, что первый оставит все локальные объекты в кадрах стека от основного до зависания точки вызова, деструктор не вызывается. Только статические / глобальные объекты получают правильное отключение. Это может удивить некоторые части кода и оставить важные вещи не выполненными.
Поскольку в C ++ есть прекрасные исключения, я бы посчитал предпочтительным заменить exit () на бросание чего-то, что справляется с main, где происходит регулярный возврат.
Другие решения
if (running == 0) но бессмысленно!
while (running == 1) < commands(); >return 0;
Делает то же самое — после выполнения 0 он выпадает из нижней части цикла, и main возвращается. Вся идея глобального running в программирование побочных эффектов, что плохо!
Учитывая граничные условия в вопросе, exit () делает то, что вы хотите. Он обычно завершает процесс, выполняя обычную очистку для завершающих программ (atexit (), уничтожая объекты без автоматического хранения и т. Д.).
Вы на самом деле не хотите использовать глобальный запуск, поэтому я бы предпочел проверить параметр return command ().
int commands()
И если по какой-то причине вы не можете просто позволить командам () прервать цикл while (например, проверив возвращаемый параметр и установив значение 0, если оно равно 1), и вы захотите немедленно выйти из программы, а не завершать оценку остальных цикл while, тогда exit () — это нормально (хотя в данном конкретном случае возврат лучше (так как в этом примере вы находитесь в main)). Просто постарайтесь не работать как глобальный — может показаться невинным прямо сейчас, но может измениться позже :).
Источник: web-answers.ru