2011-02-27 61 views
1

我想用.Net创建命令行文本编辑器。建议在.NET中创建命令行文本编辑器

我总是在做图形用户界面应用程序,所以我对完成这项任务有点失落。我需要知道的第一件事情是如何创建可滚动的编辑区。一个我可以写任何我想要的东西并上下移动的地方。也许存在一个我没有找到的即可使用的框架。所以出于这个原因我在征求意见。

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

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

+0

你为什么要这样做?你希望完成一个正常的基于窗口的人不会做100倍好? – 2011-02-27 12:21:13

+0

@ LasseV.karlsen我想创建一个CUA文本编辑器,该命令行在命令行中运行,以便在没有GUI访问权限的情况下远程执行操作。有成千上万的优秀编辑,但命令行编辑人员不是CUA兼容的,如果他们是,他们已被弃用。目标是保持简单,例如emacs有一个CUA模式,但我不喜欢它的工作方式,并且比文本编辑器多得多。 – mjsr 2011-02-27 12:33:03

回答

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阈值,而这个开销很大。

有了这些成分,您就拥有了控制台模式编辑器的基本构建模块。

+0

有趣的答案,即时看到现在的专家主页。创建Console.Form的目的之一是重新创建Edit.exe,即我想要做的同样的事情,:)。我要玩代码,看看会出现什么 – mjsr 2011-02-27 16:39:25