代码之家  ›  专栏  ›  技术社区  ›  Lion King

如何在关闭后销毁子窗口?

  •  0
  • Lion King  · 技术社区  · 8 年前

    本人已提出以下申请:

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

    问题是,当关闭父窗口时,它不会关闭并保持在 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 回复  |  直到 8 年前
        1
  •  1
  •   New Pagodi    8 年前

    根据 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
    }
    

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