【问题标题】:How to draw to a certain part of the console/terminal?如何绘制到控制台/终端的某个部分?
【发布时间】:2014-04-04 10:35:38
【问题描述】:

我很想知道如何绘制/更新终端/控制台的某个区域。是否有任何跨平台库可以这样做?

我想知道的原因是因为我正在开发一个即时消息命令行应用程序,我很想知道如何将消息查看器(所有消息所在的位置)分别更新到您为其编写命令/文本的位置聊天中的其他人。显然,如果我只是尝试获取输入并写入 cout,那么用户正在输入的输入和消息将被“干扰”(干扰是指分成多行)。

我正在考虑使用两个流对象:一个用于存储视图(来自服务器的消息/输出),另一个用于存储来自用户的输入,并在需要时重绘。但是,这似乎效率低下,需要我清屏(在这种情况下,我不知道如何以跨平台的方式高效清屏)。

我还考虑只是切换到 Qt/wxWidgets,因为它可能更简单地制作一个 GUI。

【问题讨论】:

    标签: c++ c terminal cross-platform command-line-interface


    【解决方案1】:

    使用ncurses 库以独立于终端的方式编写基于文本的用户界面。

    【讨论】:

      【解决方案2】:

      正如@Naruto 所建议的,ncurses 是一个不错的选择。在更基本的级别,您也可以只使用 ANSI 转义码在屏幕上移动光标:

      例如,要将光标定位在第 5 行第 23 列,您可以输入此

      echo -n "\033[5;23H"
      

      还有更多例子here

      【讨论】:

      • 我认为使用 ANSI 转义码比使用 ncurses 困难得多。
      • 这很大程度上取决于你想要什么。如果您只想在屏幕顶部放置日期和时间以及三四个其他信息,ANSI 代码就可以了。如果你想要滚动窗口和复杂的屏幕管理,ncurses 会更好——尽管我认为你会发现 ncurses 的学习曲线相当陡峭。
      猜你喜欢
      • 2011-10-21
      • 2016-11-23
      • 2015-02-02
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多