目标:对于个人项目,我想用全屏命令行,十六进制编辑器,文本编辑器等模拟一个老式的计算机界面。所有文本,没有图形。 (对于假想计算机的模拟器/模拟器。)
起点:我已经发现控制台模式不能再被完全筛选了,但是我可以轻松地在WPF中全屏显示WindowState = Maximized和WindowStyle = None。所以我可以制作一个全屏TextBox。
问题:是否存在用于基本写入文本屏幕和从键盘读取的现有控件,模式或库(不填写和提交表单上的字段,如TextBox面向)?
我假设我需要创建自己的自定义控件而不是文本框,并构建一大类低级方法来定位光标,输出字符,对输入做出反应等等。但是如果有尝试的话而且真正的方法或标准方法,我宁愿使用它而不是燃烧时间重新发明常用的轮子。
在过去的DOS时代,我会使用基于直接BIOS视频通话,PEEK和POKE到视频RAM以及键盘和鼠标轮询的库。当然,这不再适用,但标准控制台例程也不适用。那里有什么东西填补了这个利基市场吗?
[编辑]
澄清。在DOS时代,我们拥有以下内容的库:
Scroll(3);
Write(24,1, "Your command has been queued for execution");
input = Prompt(25, 1, "Enter a command>");
在文档编辑模式下,我们会执行
之类的操作key = WaitKey();
switch (key) {
case PGUP: Scroll(-24);
case PGDN: Scroll(24);
case LEFT: MoveCursor(-1,0);
case DOWN: MoveCursor(0,1);
// ...
}
等等......这就是我正在寻找的那种东西。具有写,滚动,提示等功能的东西
答案 0 :(得分:1)
听起来你正在开发的东西比标准的Windows窗体应用程序更接近游戏 - 使用游戏开发库(如SDL或Microsoft XNA)可能会让事情变得更加直接。
如果您已经熟悉控制台在旧版本中运行的方式,那么实现它应该非常简单 - 您可以在屏幕上显示背后的字符数组+光标位置结构应该是每帧都能轻松打印到屏幕上,加上游戏库,您可以拦截和处理所有键盘事件。
如果你打算将另一个进程的输出路由到这个“屏幕”,那么事情可能会变得有点棘手 - 如果是这种情况那么这可能不是最好的主意。
答案 1 :(得分:1)
尝试使用WPF TextBox实现文本模式应用程序的外观(和响应性)将会产生令人失望的结果。看看Pete Brown在WPF和Silverlight中创建Commodore 64 emulator时所做的事情。
我相信他的实现实际上使用了可写位图来模拟视频卡。所以你提到的偷看和戳戳实际上会发生在内存缓冲区而不是屏幕上,然后逐帧变成屏幕图像。