可执行文件完成后,如何在 Windows 控制台 window 中保留 PDcurses 输出?

How do I preserve PDcurses output in a Windows Console window after executable completes?

我正在为 Windows 10 编写一个应用程序,以在 Windows 控制台 window 的特定位置显示和更新文本。该程序由控制台中的命令启动 window。启动后,它会擦除​​ window 之前的内容,然后显示其输出,不断更新,直到完成。退出后,它应该保留显示的输出,下面应该出现一个新的命令提示符。启动、显示和随后的命令提示符都发生在同一个控制台 window。 (老派,我知道,但这是要求。)该程序是用 C 编写的,并使用对 PDcurses 库的调用来控制光标放置并将显示文本输出到屏幕。该应用程序是在 Windows 10 平台上使用 GCC/MinGW 构建的。

一切正常,直到应用程序退出,但随后显示输出消失,之前的 window 内容(在应用程序启动之前)重新出现。据我所知,这似乎是 curses 的默认行为,可能是由于它处理屏幕缓冲的方式。

我正在寻找覆盖此行为的方法,但我不确定如何处理它。我可以指示 PDcurses 写入标准屏幕缓冲区而不是备用屏幕缓冲区(如果发生这种情况)吗?如果是这样,如何?我应该在调用 endwin() 之前复制屏幕缓冲区的内容,然后再将这些内容复制回屏幕缓冲区吗?再说一次,如何?我敢肯定这个问题已经解决了,可能已经解决了很多次,但是我还没有找到任何似乎适用于 Windows 控制台中的 C 可执行文件 运行 的解决方案,而且我只有有限的解决方案使用 PDcurses 和 Windows API 库的经验。任何帮助将不胜感激。

官方的做法是设置一个环境变量:set PDC_RESTORE_SCREEN=0。您可以将它与 set PDC_PRESERVE_SCREEN=Y 结合使用,以防止 PDCurses 在启动时清除屏幕。