void CMyDlg::OnOK()
{
// CDialog::OnOK() - эту строчку убираем
}
Активация системного меню (минимизация, максимизация, закрытие)
Подскажите пожалуйста, как заставить работать системное меню? Куда вставить обработчик сообщений для закрытия приложения "крестиком" или минимизации/максимизации?
Если быть точнее, то у меня приложение закрывается только по нажатию <Enter> или <Escape>!!! Даже <Alt>+F4 не работает!!! Кто-нибудь объяснит почему?
MFC? на форуме недавно была похожая тема и объяснение этого явления(о enter & escape)
Цитата:
объяснение этого явления(о enter & escape)
Не, ну <Enter> и <Escape> - в принципе понятно, почему так работают - пережитки IDOK и IDCANCEL. Но почему не возникают события, вызываемые нажатием <min>, <max>, <close>???
Я создал обычный проект MFC, автоматически все сгенерировалось, всё работает!
Всё работает! Я просто случайно по видимому вызвал переопределение системных событий через WM_SYSCOMMAND. Теперь всё в норме. Единственное, теперь мучает вопрос, как запретить проге завершаться по <Enter> и <Escape>? :(
Почему бы не переопределить OnOK() и OnCancel() и не запретить вызов соответствующих функций базового класса?
Код:
Правда, в таком случае придётся доопределить код для WM_CLOSE, благо это совсем не сложно.
Так дело в том, что я уже весь проект почистил от возможности наступления событий OnOK и OnCancel... Что ж мне теперь по-новой создавать их? И зачем они мне? :(
переопределить можно вот как:
Код:
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
switch ( pMsg->message)
{
case WM_KEYDOWN:
switch( pMsg->wParam)
{
case VK_RETURN:
{
return true;
}
case VK_ESCAPE:
{
return true;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
{
switch ( pMsg->message)
{
case WM_KEYDOWN:
switch( pMsg->wParam)
{
case VK_RETURN:
{
return true;
}
case VK_ESCAPE:
{
return true;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
в этом случае enter escape вообще не доходят :-)))OnCancel() в этом случае можно оставить в покое чтобы форма нормально закрывалась...
ок, спасибо за совет. помогло!