使用wxWidgets将控制台附加到图形用户界面(GUI)

4
我正在编写一个wxWidgets GUI应用程序,但它还使用一些控制台对象。
我需要一种显示stdout并访问stdin的方法;最好的方法是同时显示控制台和GUI。如果用户从命令提示符/ shell等运行程序,则可以实现此操作,但当应用程序运行时,命令提示符不会自动打开以查看stdout。
我知道这是可能的,因为当您运行控制台应用程序时,控制台会自动运行。我找到了一两个需要Windows API的解决方案,但很遗憾,我的代码需要跨平台(我在Linux上开发)。
3个回答

2
解决方案非常简单:使用wxStreamToTextRedirector。这允许将控制台输出重定向到文本控件。您可以为此创建一个单独的窗口,并将其着色以看起来像控制台。上面的链接提供了一个示例。

printf似乎不起作用,只有cout。 - AndreGraveler

2
如果使用Code::Blocks,在构建目标下的项目属性中,有一个选项可以将项目构建为控制台应用程序。选择该选项将使应用程序与控制台附加运行。

2
WxWidgets有宏(wxIMPLEMENT_APP_CONSOLE、wxIMPLEMENT_APP)用于显示控制台(或不显示)。看起来很好用,您可以根据预处理器定义选择正确的宏。
class MyApp: public wxApp
{
    public:
        virtual bool OnInit();
};

#ifdef _DEBUG
wxIMPLEMENT_APP_CONSOLE(MyApp);
#else
wxIMPLEMENT_APP(MyApp);
#endif


bool MyApp::OnInit()
{

    MainWindow *frame = new MainWindow( TOOLNAME, wxPoint(50, 50), wxSize(600,400) );
        frame->Maximize();
...
    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接