我想用.Net创建一个命令行文本编辑器。
我总是做GUI应用程序,所以我对完成这项任务有点失落。我需要知道的第一件事是如何创建一个可滚动的编辑器区域。我可以写任何我想要的地方并向上和向下移动。也许存在一个我没有找到的随时可用的框架。因此,我正在征求意见。
另一件事是如何在滚动时创建一个不随编辑区移动的菜单栏。
总结一下,我想为Windows控制台创建一个非常简单的编辑器,如EDIT。
答案 0 :(得分:1)
我不知道CUA的意思,但是......
您可以使用Console.SetCursorPosition()来设置光标的位置,以便在您需要的任何地方进行写入。
示例:
public void Run()
{
Console.WriteLine("Hello, World.");
Console.WriteLine("buffer size: (w,h)= ({0},{1})", Console.BufferWidth, Console.BufferHeight);
Console.WriteLine("position= ({0},{1})", Console.CursorLeft, Console.CursorTop);
Console.WriteLine("Hello, again.");
Console.WriteLine("position= ({0},{1})", Console.CursorLeft, Console.CursorTop);
int x= 2000;
Console.WriteLine("\n\n\nCounting to {0}...", x);
int left= Console.CursorLeft;
int top= Console.CursorTop;
for (int i= 0; i < x; i++)
{
Thread.Sleep(5);
Console.SetCursorPosition(left, top);
Console.Write("{0,6}",i);
}
Console.WriteLine("\n\n\ndone.");
}
鉴于该功能,您可以构建更强大的小部件,如菜单栏,命令栏等。
我不知道如何仅使用托管代码在控制台中的给定位置“读取”文本;你可以通过pInvoke来做到这一点。您需要从屏幕上阅读以支持剪切/粘贴操作,搜索等。即使有pInvoke的可能性,我也建议采用双缓冲写入方法,在托管代码中保存一个缓存,写入屏幕。像这样:
然后当您需要从“控制台”读取时,只需从缓冲区中读取即可。这避免了每次读取都超过pInvoke阈值(这是昂贵的)。
使用这些成分,您可以获得控制台模式编辑器的基本构建块。