Я не знаю, что означает 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, который является дорогостоящим для каждого чтения.
С этими ингредиентами у вас есть основные строительные блоки редактора консольного режима.