我做了以下申请:
正如您在父窗口中单击设置按钮时所看到的那样,打开一个名为" 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;
}
答案 0 :(得分:1)
模态对话框是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
}
您的主应用程序框架将在显示设置窗口时等待,然后当窗口超出范围时设置窗口将自行删除。不需要在主框架中存储用于设置窗口的指针。