Как сделать, чтобы диалог не закрывался при
нажатии пользователем 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, то можно вручную добавить
эти виртуальные функции. В заголовочном файле
диалогового класса:
class CMyDialog : public CDialog
{
virtual void OnOK();
virtual void OnCancel();
DECLARE_MESSAGE_MAP()
};
А затем в соответствующем .CPP файле:
void CMyDialog::OnOK()
{
}
void CMyDialog::OnCancel()
{
}
Теперь обработчики не будут вызывать EndDialog()
и, соответственно диалог не будет закрываться.
|