Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка нажатия 'Esc' в диалоговых окнах

4.8K
05 июня 2007 года
fakel15
54 / / 02.12.2005
Здравствуйте! Появилась маленькая проблемка... Написал программу, за основу взял диалоговое окно, НО оно закрывается при нажатии клавиши 'Esc'!!! можно ли это как-то исправить? То есть прога НЕ должна закрываться при нажатии 'Esc'. (все это хозяйство написано с помощью MFC)
16K
05 июня 2007 года
right_systems
29 / / 08.11.2006
Перегрузи метод afx_msg void OnCancel();. Окно не будет закрываться, если в этом методе не вызывать CDialog::OnCancel().
Чтобы еще и Enter игнорировать перегружай OnOk().
4.8K
06 июня 2007 года
fakel15
54 / / 02.12.2005
Cпасибо. Я тут покапался и еще кое-что нашел.
Если мы перегружаем метод OnCancel() то прога не будет завершаться, НАША цель достигнута!!!
НО при этом отключается кнопка закрытия окна (крестик которая) и программа не реагирует на File->Exit.
Нашел следующий выход:
1. Перегружаем OnCancel()
2. Заставляем окно реагировать на WM_CLOSE
3. В теле программы находим метод отвечающий за его обработку.
Что-то типа
void CWork::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
}
и конец его добавляем EndDialog(IDCANCEL); т.е.
void CWork::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
EndDialog(IDCANCEL);
}
Как оказалось эта самая EndDialog(IDCANCEL); и есть тело для метода CDialog::OnCancel().
4. С File->Exit поступаем точно так же.
324
10 июня 2007 года
AndreySar
532 / / 01.08.2004
Цитата: fakel15
Здравствуйте! Появилась маленькая проблемка... Написал программу, за основу взял диалоговое окно, НО оно закрывается при нажатии клавиши 'Esc'!!! можно ли это как-то исправить? То есть прога НЕ должна закрываться при нажатии 'Esc'. (все это хозяйство написано с помощью MFC)



обрабатывай сообщение PreTranlateMessage (что то типа), в нем есть сообщение о нажатии клавиш KEYDOWN, запрети дальнейшую обработку этого события при VK_ESCAPE

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог