【发布时间】:2018-05-11 06:49:20
【问题描述】:
我现在正在将我的一个旧应用程序(使用 wxWidgets 3.0.2 制作并针对 Windows)移植到 macOS 上。我的应用是一个代码编辑器,在关闭应用的时候,我想问用户是否要保存。
switch (dialog->ShowModal())
{
case wxID_YES:
OnMenuSave(e);
// Only break if the file is not saved
// The user must have clicked on cancel button in save as box
if (!editorPage->CodeChanged())
break;
case wxID_CANCEL:
e.Veto();
dialog->Destroy();
return;
}
这曾经可以正常工作,但是我想以 mac 方式显示对话框,就像它们曾经附加到创建它们的窗口一样。
所以当我编写辅助函数以在对话框中使用ShowWindowModalThenDo 函数时。
template <typename Functor>
inline void ShowWindowModalThenDo(wxDialog *dlg, const Functor& onEndModal)
{
#ifdef __WXMAC__
dlg->ShowWindowModalThenDo(onEndModal);
#else
onEndModal(dlg->ShowModal());
#endif
}
问题在于它不会在显示对话框时暂停事件。当我在编辑器关闭事件中处理这个问题时,这尤其成问题。因此,即使显示对话框并允许用户单击取消,编辑器页面也会关闭。
如何暂时暂停父窗口上的事件处理?
【问题讨论】: