Есть окно графика, которое при щелчке правой кнопкой мыши отображает всплывающее меню, а затем при выборе показывает окно:
void CChart::Series_OnPopupMenu(wxCommandEvent& evt)
{
int evtID = evt.GetId();
if (m_dlgManageSeriesData)
return;
if(evtID==ID_ADDNEW)
{
m_dlgManageSeriesData=new dlgManageSeriesData(this);
m_dlgManageSeriesData->Bind(wxEVT_CLOSE_WINDOW, &CChart::OnDlgManageSeriesDataClose, this);
m_dlgManageSeriesData->Show();
}
Чтобы иметь возможность отслеживать, закрыто ли показанное окно:
void CChart::OnDlgManageSeriesDataClose(wxCloseEvent & evt)
{
m_dlgManageSeriesData->Unbind(wxEVT_CLOSE_WINDOW, &CChart::OnDlgManageSeriesDataClose, this);
m_dlgManageSeriesData = nullptr;
evt.Skip();
}
Окно, а именно dlgManageSeriesData, имеет две кнопки:
m_BtnOK = new wxButton(this, wxID_OK, "OK");
m_BtnCancel = new wxButton(this, wxID_CANCEL, "Cancel");
Например, когда нажата кнопка Отмена, просто оно должно закрыть окно:
void dlgManageSeriesData::OnBtnCancelClick(wxCommandEvent & event)
{
Close();
}
Мало что происходит в разных сценариях ios:
1) Если я не пытаюсь вручную закрыть окно с помощью dlgManageSeriesData::OnBtnCancelClick
, то сохраняя wxID_CANCEL и нажатие на кнопку Cancel
закрывает ее, как и ожидалось, от wxDialog . Однако , похоже, что закрытие окна таким способом не генерирует wxEVT_CLOSE_WINDOW, так как CChart::OnDlgManageSeriesDataClose
никогда не вызывается.
2) Если я пытаюсь закрыть окно с Close()
при сохранении wxID_CANCEL окно никогда не закрывается.
3) Если я изменил идентификатор кнопки и объявил кнопку отмены как m_BtnCancel = new wxButton(this, wxID_ANY, "Cancel");
, все работает как положено, так что кнопка отмены закрывает окно и вызывается CChart::OnDlgManageSeriesDataClose
. Аналогичное обоснование следует для кнопки OK
.
Возможно, я неправильно понял некоторые концепции, но пара вопросов:
1) Является ли система обработки событий wxWidgets ручками обработки событий эти идентификаторы (wxID_OK или wxID_CANCEL) по-разному, так что это препятствовало закрытию окна?
2) Каков хороший способ использования wxID_OK и wxID_CANCEL, если я все еще хочу предпринять некоторые действия, когда окно закрывается?
Я использую wxWidgets 3.1.3 на Windows 10 с VS 2017.