在我的wxWidgets应用程序中,我正在检查命令行争论,如果我找到它,我会执行操作然后关闭窗口。但是,我似乎无法正常关闭应用程序。我想用退出代码关闭程序,例如3.当我在wxApp :: OnInit中检查命令行参数时,我试图只调用exit(3)
,但是,这似乎是不正确的,因为它导致内存泄漏到wxwidgets中的某个地方。
然后我尝试存储退出代码,覆盖OnRun并返回那里,但是,当我在init.cpp
行472
return wxTheApp->OnRun();
时发生崩溃。
有没有人知道在检测到应用程序关闭后,如何使用wxApp中的自定义退出代码正确关闭应用程序?我也尝试重载wxApp::OnExit
,但是,即使我不重载OnRun
,它也永远不会被调用。
http://codepad.org/WYiOJq55处的代码示例,原因是由于某些原因此帖子中不允许使用该代码
编辑代码粘贴:
int SomeApplication::OnRun()
{
if(mExitCode != 0)
{
ExitMainLoop();
return mExitCode;
}
else
return wxApp::OnRun();
}
答案 0 :(得分:1)
当我像这样重写wxAPP :: OnRun()时:
int MyApp::OnRun()
{
wxApp::OnRun();
return 3;
}
一切正常
如果我创建一个小批处理文件
minimal.exe
echo el is %ERRORLEVEL%
它产生预期的结果
>test.bat
>minimal.exe
>echo el is 3
el is 3
我认为您的代码存在问题
int SomeApplication::OnRun()
{
if(mExitCode != 0)
{
ExitMainLoop();
return mExitCode;
}
else
return wxApp::OnRun();
}
是你在检查退出代码之前没有调用基类OnRun,可能是在wxAPP :: OnRun()
执行的代码中的某处设置的所以我猜这会对你有用
int SomeApplication::OnRun()
{
wxApp::OnRun();
return mExitCode;
}
答案 1 :(得分:1)
根据您的评论,您似乎无法启动wxFrame并希望尽快退出应用程序。为此,请让SomeApplication
的构造函数将mExitCode
初始化为0
。然后在OnInit
期间执行命令行参数检查,如果要在检查后立即关闭应用程序,请将mExitCode
设置为退出代码,并将return true
设置为OnInit
。
以下是OnRun
函数在没有打开另一个窗口的情况下的工作方式。
int SomeApplication::OnRun()
{
if(mExitCode == 0)
wxApp::OnRun();
return mExitCode;
}