【问题标题】:wxWidgets GUI + Console/Emulating a Console (wxTextCtrl?)wxWidgets GUI + 控制台/模拟控制台(wxTextCtrl?)
【发布时间】:2012-09-09 02:20:13
【问题描述】:

我有一个 wxWidgets GUI 程序,我想为标准输出/等附加一个标准控制台窗口。去。

如果有人知道如何做到这一点(一个 GUI 应用程序 和一个控制台窗口),那就太好了。但是,环顾四周,我怀疑这不是直接可能的。

基于this similar thread,我的印象是这可以在单独的 wxFrame 中使用 wxTextCtrl 进行模拟。如果这是一个好方法,是否有在任何地方进行的例子?还有其他方法吗?

编辑:我希望拥有(或至少尽可能接近地模拟)控制台窗口——因此,黑色背景、具有固定宽度字体的白色字符等。

【问题讨论】:

    标签: wxwidgets


    【解决方案1】:

    您可以重定向,例如std::coutwxTextCtrl 使用 wxStreamToTextRedirector 但它并不能真正取代 Windows 下的真实控制台或 Unix 下的 PTY,因为只有通过 std::cout 输出的文本将被重定向,但不会使用 printf() 或任何打印的任何内容其他功能。如果你需要后者,你需要做一些特定于平台的事情,在这种情况下你应该告诉你正在使用哪个平台以及你需要做什么。

    【讨论】:

    • 是的,我确实需要 printf(...)。实际上,我想做的是制作一个与非 GUI 程序中提供的控制台尽可能没有区别的“控制台”。
    • 这个需要使用Windows下的普通控制台,没有办法模拟。只需在链接时将您的应用程序设置为控制台之一(/subsystem:console),不要与它分离。请注意,您仍然可以毫无问题地在“控制台”应用程序中使用 GUI 类。
    • 在控制台模式下创建时,总是得到“unresolved external symbol _main”?
    • 要么使用 IMPLEMENT_APP_CONSOLE 而不是普通的 IMPLEMENT_APP,要么——可能更好——告诉链接器使用 WinMain() 入口点,即使它是使用 /ENTRY 链接器选项的控制台应用程序。
    • 我在 toplevel.cpp:495 中遇到访问冲突。我认为问题在于 wxTheApp 被定义为:#define wxTheApp static_cast(wxApp::GetInstance()),而不是 wxAppConsole。改用 /ENTRY 会导致大量 LNK4210,然后是 CRT 无效堆断言错误。
    【解决方案2】:

    我建议从标准输出“升级”到 wxWidgets 日志记录类,它更加灵活。 Here is an overview.

    【讨论】:

    • 是否有使用这些类模拟控制台的示例?
    • 几个示例应用程序使用日志记录类。它们不会“模拟”控制台——关键是它们比控制台更好、更灵活。通过仔细使用样式、背景颜色和字体,您可以使日志记录窗口看起来像您希望的控制台一样。
    • 使用 wxLogWindow 我能够让某些东西正常工作,但我找不到一种方法来自定义它以使其看起来像控制台。
    • 你知道如何通过使用样式、背景颜色和字体来改变 wxWidgets 窗口的外观吗?然后,您可以调用 wxLogWindow 实例上的方法,或者子类化 wxLogWindow 并调用新构造函数中的方法。
    猜你喜欢
    • 2011-01-28
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多