emacs
,vim
,joe
甚至nano
等终端发短信都能够在命令行中显示任意UI元素,而无需在每个单独完整的UI中重写时间,但覆盖目前的UI。
使用常规输出流,您只能使用返回字符'\r'
跳转到当前输出行的开头并将其写入,但是从我发现的内容中,您无法跳过多行,{ {1}}与cout << "\r\r\r\r\r\r";
具有相同的效果,所以后面换行的所有内容显然都是一成不变的。
其他应用程序执行类似的操作,例如Ubuntu上的cout << '\r'
或$dpkg-reconfigure ca-certificates
图形包管理器。他们还为UI元素绘制轮廓,这些元素可能只是特殊字符。但是,他们仍然需要覆盖多行控制台输出。
他们是如何做到的?该行为是否可移植到Windows平台?
答案 0 :(得分:3)
答案 1 :(得分:2)
curses是一个unix库,可让您在任意位置操作终端的内容。 ncurses是一个免费的,独立于供应商的curses版本,以及在linux上使用的curses库。
dpkg-reconfigure使用构建在curses之上的对话框,并提供用户界面小部件而不是原始终端访问。
ncurses包含扩展“菜单”,“表单”,“面板”,您可以使用它们自己实现用户界面小部件,但如果您走这条路线,它会变得非常复杂。
关于windows,有一些pdcurses在“dos box”终端中本地运行。你可以编写在windows上使用pdcurses的可移植程序,并在linux上使用ncurses,如果你将自己局限于公共子集。或者,您可以使用cygwin在Windows上使用ncurses。
Windows的另一个替代方案可能是Borlands TVision - 如果您能找到旧版本的Borland的turbo pascal或c ++编译器,它们包含一个完整的文本用户界面应用程序框架,称为TVision。但不确定这些代码生成的代码是否仍会在现代Windows版本上运行。