当我关闭所有窗口(框架/对话框)时,调试器会使程序保持运行。这就是问题所在 我希望在关闭对话框时关闭程序。
我想做两件事:
1.运行程序,将对话框作为主窗口,并在关闭该对话框时退出程序
2.运行带有窗口框架的程序,该窗口框架可以弹出一个或多个对话框,并在关闭所有对话框后关闭该程序。 (目前,关闭表单会关闭所有对话框,但不关闭应用程序)
如果只有一个框架,它就会关闭。
如何关闭(null父对象)对话框,以便在关闭所有窗口后它不会保持程序运行(消息循环运行)。我不需要对话框来导致程序退出,只是不阻止程序退出。
在下面的示例中,如果表单是一个对话框,或者如果在表单中创建了一个对话框(ok对话框)然后关闭,则程序会在所有窗口关闭的情况下继续运行。
class MyApp : public wxApp
{
public:
bool OnInit();
private:
void OnAboutClicked(wxCommandEvent &evt);
MyFrame1 *myF;
};
bool MyApp::OnInit()
{
if (!wxApp::OnInit())
return false;
myF = new MyFrame1(NULL);
myF->Show();
return true;
}
这些没有帮助。
MyDialog1::~MyDialog1()
{
//this->Destroy();
//delete this;
}
答案 0 :(得分:0)
这个问题来自对话框,当顶级时,与顶级表单的行为不同。当窗口关闭时,更改对话框以自行销毁是非常简单的。你可以在窗口的OnClose事件中调用一个删除它,它就可以了。只需一个窗口即可使程序保持运行。
将功能(或其他)连接到关闭窗口事件
//this may be in the object constructor or other appropriate place
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MyDialog1::OnClose ) );
//an example of a similar Bind call looks like
this->Bind(wxEVT_CLOSE_WINDOW, &MyDialog1::OnClose, this);
使用的函数或成员可以像删除它一样简单;。
//located in the dialog class definition
virtual void OnClose(wxCloseEvent& event) { delete this; }
这表明对象/窗口没有被破坏。当不跟踪所有创建的对话框以及它们是无模式的时,这种方法很有用,因为每个对话框都会自行清理。这个清理过的对象(不再有关闭它们的UI)使程序保持运行。
注意:建议使用Bind而不是Connect。有关基本原理的信息,请参阅this wxWidgets有关Bind的说明。