Обработка нажатия 'Esc' в диалоговых окнах
Здравствуйте! Появилась маленькая проблемка... Написал программу, за основу взял диалоговое окно, НО оно закрывается при нажатии клавиши 'Esc'!!! можно ли это как-то исправить? То есть прога НЕ должна закрываться при нажатии 'Esc'. (все это хозяйство написано с помощью MFC)
Чтобы еще и Enter игнорировать перегружай OnOk().
Если мы перегружаем метод 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 поступаем точно так же.
Цитата: fakel15
Здравствуйте! Появилась маленькая проблемка... Написал программу, за основу взял диалоговое окно, НО оно закрывается при нажатии клавиши 'Esc'!!! можно ли это как-то исправить? То есть прога НЕ должна закрываться при нажатии 'Esc'. (все это хозяйство написано с помощью MFC)
обрабатывай сообщение PreTranlateMessage (что то типа), в нем есть сообщение о нажатии клавиш KEYDOWN, запрети дальнейшую обработку этого события при VK_ESCAPE