【问题标题】:wxWidgets - Blocking window modal dialogs on OS XwxWidgets - 在 OS X 上阻止窗口模式对话框
【发布时间】: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
}

问题在于它不会在显示对话框时暂停事件。当我在编辑器关闭事件中处理这个问题时,这尤其成问题。因此,即使显示对话框并允许用户单击取消,编辑器页面也会关闭。

如何暂时暂停父窗口上的事件处理?

【问题讨论】:

    标签: c++ c++14 wxwidgets


    【解决方案1】:

    如果您只想将模态对话框显示为工作表,则无需使用ShowWindowModalThenDo(),只需检查您的对话框是否具有应用作工作表父级的窗口作为父级。

    【讨论】:

    • 确实设置为父级。我也打电话给dialog-&gt;SetParent(wxGetTopLevelWindow(this)) 确认了。
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多