2

在我的 wxWidgets 应用程序中,我正在检查命令行参数,如果找到,我会执行一个操作,然后关闭窗口。但是,我似乎无法让应用程序正确关闭。我想用退出代码关闭程序,例如 3。当我检查 wxApp::OnInit 中的命令行参数时,我尝试调用exit(3),但是,这似乎不合适,因为它导致 wxwidgets 中某处的内存泄漏.

然后我尝试存储退出代码,覆盖 OnRun 并返回那里,但是,当我这样做时,init.cpp472return wxTheApp->OnRun();.

有谁知道在检测到应用程序应该关闭后如何使用来自 wxApp 的自定义退出代码正确关闭应用程序?我也尝试过重载wxApp::OnExit,但是,即使我没有重载,它也永远不会被调用OnRun

http://codepad.org/WYiOJq55上的代码示例,由于某些原因,此帖子中不允许使用该代码

编辑粘贴代码:

int SomeApplication::OnRun()
{
    if(mExitCode != 0)
    {
        ExitMainLoop();
        return mExitCode;
    }
    else
        return wxApp::OnRun();
}
4

2 回答 2

2

根据您的评论,您似乎从未启动 wxFrame 并且只想尽快退出应用程序。为此,请让您的构造函数SomeApplication初始化mExitCode0. 然后OnInit在进行命令行参数检查期间,如果您想在检查后立即关闭应用程序,请设置mExitCode为您的退出代码并return trueOnInit.

以下是您的OnRun函数如何在不打开另一个窗口的情况下工作。

int SomeApplication::OnRun()
{
    if(mExitCode == 0)
        wxApp::OnRun();

    return mExitCode;
}
于 2012-05-02T22:23:59.387 回答
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;
 }
于 2012-05-01T17:45:18.467 回答