我正在寻找退出 WxWidgets 应用程序的正确方法。
现在要退出,当我的主 wxFrame 关闭时,我调用 wxGetApp().ExitMainLoop() 。然后我希望调用我的应用程序 OnExit 方法,以便我可以正确终止应用程序。
就代码而言,它看起来像:
void MainFrame::onClose(wxCloseEvent& ev)
{
wxGetApp().ExitMainLoop();
}
//...
int MyApp::OnExit()
{
wxBusyCursor wait;
/* Free all non-wxWidgets memory here*/
return 0;
}
当用户请求关闭应用程序时,MainFrame::onClose 被成功调用。
但是 MyApp::OnExit 有时被调用,有时不被调用。
我做错了什么?
首先,当最后一帧关闭时,您根本不需要调用
ExitMainLoop()
,因为默认情况下,无论如何关闭它都会执行此操作。
但是无论你是否这样做,
OnExit()
仍然应该被调用,所以如果没有被调用,那是由于这里没有显示的其他原因。像往常一样,调试此类神秘问题的最佳方法是从有效的事情开始,例如wxWidgets 源代码分发的 samples/minimal
子目录中的最小样本,并尝试通过逐步修改它以执行实际程序的操作来重现其中的问题。