C # + WPF: текстовый режим, эквивалентный старым библиотекам DOS или curses - PullRequest
2 голосов
/ 01 марта 2011

Цель: для личного проекта я хотел бы смоделировать старомодный компьютерный интерфейс с полноэкранной командной строкой, шестнадцатеричным редактором, текстовым редактором и т. Д. Весь текст, без графики. (Для симулятора / эмулятора гипотетического компьютера.)

Исходная точка: я понял, что режим консоли больше не может быть полноэкранным, но я могу легко перейти на полноэкранный режим в WPF с WindowState = Maximized и WindowStyle = None. Так что я могу сделать полноэкранный TextBox.

Проблема: существует ли существующий элемент управления, шаблон или библиотека для базовой записи на экран текста и чтения с клавиатуры (без заполнения и отправки поля в форме, к которой привязан TextBox)?

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

В старые времена DOS я бы использовал библиотеку, основанную на прямых видеозвонках BIOS, PEEK и POKE на видеопамять RAM, а также на опросах клавиатуры и мыши. Конечно, это больше не применимо, но и стандартные подпрограммы консоли не применяются. Уже есть что-то, что заполняет эту нишу?

[править]

Чтобы уточнить. В дни DOS у нас были библиотеки для таких вещей, как:

Scroll(3); 
Write(24,1, "Your command has been queued for execution"); 
input = Prompt(25, 1, "Enter a command>");

и в режиме редактирования документа мы будем делать что-то вроде

key = WaitKey(); 
switch (key) { 
  case PGUP: Scroll(-24); 
  case PGDN: Scroll(24);
  case LEFT: MoveCursor(-1,0);
  case DOWN: MoveCursor(0,1);
  // ...
} 

и т.д ... Это то, что я ищу. Что-то с функциями, такими как Запись, Прокрутка, Подсказка и т. Д.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Попытка добиться внешнего вида (и отзывчивости) приложения в текстовом режиме с использованием WPF TextBox приведет к разочаровывающим результатам.Посмотрите, что сделал Пит Браун, когда создал эмулятор Commodore 64 в WPF и Silverlight.

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

1 голос
/ 01 марта 2011

Похоже, то, что вы разрабатываете, ближе к игре, чем стандартное приложение для форм Windows - использование библиотеки разработки игр (такой как SDL или Microsoft XNA) может сделать вещи более прямыми.

Если вы уже знакомы с тем, как консоль функционировала в былые времена, то реализовать это должно быть довольно просто - у вас есть массив символов за кадром, отображаемый на экране + структура положения курсора, которая должна быть легко выводить на экран каждый кадр, плюс библиотека игр даст вам возможность перехватывать и обрабатывать все события клавиатуры.

Если вы планируете перенаправить вывод другого процесса на этот «экран», то все может стать немного сложнее - если это так, то это может быть не самой лучшей идеей.

...