Советы по созданию текстового редактора командной строки в .NET - PullRequest
1 голос
/ 27 февраля 2011

Я хочу создать текстовый редактор командной строки с .Net.

Я всегда работаю с приложениями с графическим интерфейсом, так что я немного растерялся из-за этой сделки.Первое, что мне нужно знать, это как создать прокручиваемую область редактора.Место, где я могу написать все, что захочу, и двигаться вверх и вниз.Может быть, существует готовый фреймворк, которого я не нашел.Поэтому по этой причине я прошу совета.

Другое дело, как создать строку меню, которая не перемещается вместе с областью редактора при прокрутке.

Подводя итог, я хочу создать очень простой редактор, такой как EDIT для консоли Windows.

1 Ответ

1 голос
/ 27 февраля 2011

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

С этими ингредиентами у вас есть основные строительные блоки редактора консольного режима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...