在.NET中创建命令行文本编辑器的建议

时间:2011-02-27 11:27:44

标签: .net windows command-line text-editor

我想用.Net创建一个命令行文本编辑器。

我总是做GUI应用程序,所以我对完成这项任务有点失落。我需要知道的第一件事是如何创建一个可滚动的编辑器区域。我可以写任何我想要的地方并向上和向下移动。也许存在一个我没有找到的随时可用的框架。因此,我正在征求意见。

另一件事是如何在滚动时创建一个不随编辑区移动的菜单栏。

总结一下,我想为Windows控制台创建一个非常简单的编辑器,如EDIT。

1 个答案:

答案 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的可能性,我也建议采用双缓冲写入方法,在托管代码中保存一个缓存,写入屏幕。像这样:

http://code.google.com/p/console-forms/source/browse/trunk/Console.Forms/Console.Forms/Drawing/ConsoleCanvas.cs?spec=svn9&r=9

然后当您需要从“控制台”读取时,只需从缓冲区中读取即可。这避免了每次读取都超过pInvoke阈值(这是昂贵的)。

使用这些成分,您可以获得控制台模式编辑器的基本构建块。