Как запретить закрытие диалога? Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
Wintermute
Knows some wx things
Knows some wx things
Posts: 38
Joined: Tue May 26, 2009 8:39 am
Location: Moscow, Russia
Contact:

Как запретить закрытие диалога?

Post by Wintermute »

Привет, люди добрые!
Что-то я совсем запутался. Подскажите, плиз.
У меня есть диалог — класс от wxDialog. В этом диалоге имеется wxListCtrl со стилями wxLC_REPORT и wxLC_EDIT_LABELS. Если начать редактировать какую-нибудь метку в нём, а потом попытаться отменить редактирование, нажав Esc, то диалоговое окно закрывается.
Как бы этого избежать?
Пробовал поставить обработчик на EVT_KEY_DOWN, который вызывает event.Skip(), если был нажат не Esc или если никакая метка не редактируется, но диалог по-прежнему закрывается.
При нажатии Esc ведь не происходит событие EVT_CLOSE, и не вызывается метод Destroy.
Как по правильному обойти такое поведение?

Спасибо заранее!

OS: Windows XP Professional SP2 (MUI language: English)
Borland C++ Builder 6
wxWidgets 2.8.9
FAQ
1. What the ... ?
2. Again what the ... ?
deniman
In need of some credit
In need of some credit
Posts: 9
Joined: Sat May 02, 2009 7:46 pm

Post by deniman »

Пробуй добавить пустой обработчик:

EVT_BUTTON(wxID_CANCEL, <НазваниеДиалога>::OnClose)

Должно помочь.
Wintermute
Knows some wx things
Knows some wx things
Posts: 38
Joined: Tue May 26, 2009 8:39 am
Location: Moscow, Russia
Contact:

Post by Wintermute »

Да нет же, это не помогает.
Мне нужно ведь отследить закрытие по нажатии Esc, а не на кнопку Cancel.
FAQ
1. What the ... ?
2. Again what the ... ?
Kolya
Experienced Solver
Experienced Solver
Posts: 85
Joined: Mon Dec 11, 2006 11:35 am
Location: /dev/null

Post by Kolya »

Wintermute wrote:Да нет же, это не помогает.
Мне нужно ведь отследить закрытие по нажатии Esc, а не на кнопку Cancel.
Если на диалоге есть кнопка с идентификатором wxID_CANCEL, то при нажатии Esc диалог будет закрыватся.
Для избежания этого необходимо для диалога вызвать:

Code: Select all

wxDialog::SetEscapeId(wxID_NONE);
Дальше можно почитать src/common/dlgcmn.cpp. В частности код возле wxDialogBase::EmulateButtonClickIfPresent.
Wintermute
Knows some wx things
Knows some wx things
Posts: 38
Joined: Tue May 26, 2009 8:39 am
Location: Moscow, Russia
Contact:

Post by Wintermute »

О, круто! Спасибо!

ЗЫ
Только в диалоге, с которым я экспериментировал, не было кнопки с идентификатором wxID_CANCEL. Только wxID_OK. =)
FAQ
1. What the ... ?
2. Again what the ... ?
User avatar
T-Rex
Moderator
Moderator
Posts: 1249
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex »

Code: Select all

Дальше можно почитать src/common/dlgcmn.cpp. В частности код возле wxDialogBase::EmulateButtonClickIfPresent.
/me Устроился поудобнее, запасся попкорном чтобы посмотреть на это действо. "Читай код" - это моя фраза.
Post Reply