如何制作这样的GUI,但是在控制台应用程序中?
有很多例子,例如alsamixer:
答案 0 :(得分:4)
Curses库可用于创建此类用户界面。这是NCurses的introduction - 最着名的Curses实现。
答案 1 :(得分:2)
大多数控制台平台都具有goto(x,y)等功能,可以将光标定位在屏幕上的某个位置。
这可用于使用您想要的任何ascii字符/颜色“绘制”屏幕。
答案 2 :(得分:2)
Termbox是ncurses的一个有趣替代方案,您可能也会感兴趣。
答案 3 :(得分:2)
在DOS上,在Windows出现之前,有许多不同的“GUI”API可供使用,如果您想直接编码,所有这些API基本上都隐藏了您需要进行的基础VGA调用。我亲自与之合作的人包括TurboPascal和Foxpro。甚至,简而言之,Visual Basic for DOS包含一个类似的API。除了输出文本外,这些API通常还包括下拉菜单,绘制简单框和阴影等功能。一些更复杂的甚至可以使用基于字符的“Windows”,你可以用光标在屏幕上拖动。
VGA可以在任何一个文本中访问(非常像一个主机终端,你实际上只是在行/列输出一个字符)或者图形模式,它与GDI更相似(尽管你必须做一切< / em>你自己,很慢,很少用于除早期绘画和cad程序之外的任何事情)。你的例子是文本模式。
在Unix上,这些考虑因素更加新颖,标准是使用Curses,这是一种隐藏底层终端特征的类似文本模式API。
答案 4 :(得分:1)
像Curses这样的库与窗口管理器运行图形环境的方式非常相似。窗口,按钮,复选框等控件都由库定义。
您不是将WriteLining写入屏幕,而是将文本写入窗口或设置某些控件的文本。该库可跟踪窗口,重叠,边框效果,阴影,拖动行为(如果支持鼠标)。它构建了字符,前景和背景颜色的字符缓冲区。
发布的goto(x,y)示例可行,但如果实现为每个字符执行此操作,则性能将明显滞后。为了快速,当您对某些文本或其他属性进行更改时,库知道需要从字符缓冲区更新的矩形区域,并将该区域的新字符数据写入一个具有优化调用的块中的屏幕视频驱动程序。
与只是将每个可打印字符回显到屏幕的基本控制台应用程序不同,这些高级应用程序中的键盘输入被拦截,并且这些字符更明确地写入(或不写入,在应用程序的热键的情况下)右侧窗户或其他什么。
我希望.Net内置一个完整的控制台窗口库。... [叹气]我认为那些旧的控制台式应用程序看起来很漂亮。