关闭后如何破坏子窗口?

时间:2018-03-23 12:28:35

标签: c++ wxwidgets

我做了以下申请:

正如您在父窗口中单击设置按钮时所看到的那样,打开一个名为" settings"的新子窗口,但在关闭该子窗口时,它不会关闭并保持隐藏状态。当再次打开子窗口时,它会创建另一个子窗口的实例,依此类推。

问题是关闭父窗口时它不会关闭并保留在task manager -> processes

// Creates an instance of child window
void mainfrm::settings_btnOnButtonClick(wxCommandEvent & event) {
    this->settingWindow = new settingsfrm(this);
    settingWindow->ShowModal();
}
// When closing the child window
void settingsfrm::cancel_btnOnButtonClick(wxCommandEvent & event) {
    this->EndModal(0);
}
// When destroying the variable that contains the instance of child window
mainfrm::~mainfrm() {
    settingWindow = NULL;
    delete settingWindow;
}

1 个答案:

答案 0 :(得分:1)

根据the documentation

  

模态对话框是wxWindow派生的极少数示例之一   可能在堆栈上而不是在堆上创建的对象

所以你的第一个代码块可以这样编写(假设settingsfrm是从wxDialog派生的):

// Creates an instance of child window
void mainfrm::settings_btnOnButtonClick(wxCommandEvent & event) {
    settingsfrm settingWindow(this);
    int i = settingWindow.ShowModal();

    //if necessary, do something with i here
}

您的主应用程序框架将在显示设置窗口时等待,然后当窗口超出范围时设置窗口将自行删除。不需要在主框架中存储用于设置窗口的指针。

相关问题