Написание консоли в приложении

Мое приложение требует, чтобы консоль была встроенав окно приложения, например, в такой программе, как AutoCAD, где консоль находится в нижней части окна в ожидании команд.

enter image description here

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

На данный момент у меня есть простая консоль в моем приложении, но она кажется очень неуклюжей по сравнению с терминалом (оболочкой), какой я хочу видеть консоль.

enter image description here

Я сделал это с помощью имеющейся у меня консоли: когда пользователь нажимает клавишу TAB, которую показывает консоль, затем он может ввести свою команду/строку; После нажатия клавиши Returnвведенная строка анализируется, и команда обрабатывается.

Я использую объекты sf::Textдля вывода текста в окне приложения. Всего используется 5 объектов sf::Text, 4 для предыдущих команд/сообщений об ошибках и 1 для текущей командной строки. При нажатии клавиши Return4-й sf::Textменяет свою текущую строку на 3-ю, 3-ю на 2-ю, 2-ю на 1-ю и 1-ю на текущую команду string, то текущая командная строка очищается и снова готова к вводу.Таким образом, остается место для 4 «историй» команд и/или ошибок. Не самый лучший, но это было лучшее, что я мог придумать. Конечно, объем истории можно изменить, добавив больше объектов sf::Text. Итак, вот как я вывожу консоль на экран

sf::RectangleShape rectangle;

rectangle.setSize(sf::Vector2f(App->getSize().x, App->getSize().y / 3));
rectangle.setPosition(0, 0);

rectangle.setFillColor(sf::Color::black);

App->draw(rectangle);   // This renders the console looking background rectangle
App->draw(CLine);   // This renders the current command line

for(int i = 4; i >= 0; --i) // This renders the history as described above, their idevidual positions are setup earlier on in the program
{
    CHistory[i].setString(CS[i]);
    App->draw(CHistory[i]);
}

Приложение— это просто sf::RenderWindow*

Мой общий вопрос: встроить консоль в мое окно SFMLбез того, чтобы это было просто изображение текстовых объектов, визуализированных так, чтобы они выглядели как консоль, как я сделал выше. Я бы предпочел иметь настоящую консоль/оболочку/терминал в своем приложении. Как и стандартная оболочка bash, но, конечно же, мой собственный интерпретатор оболочки.

9
задан Elgoog 13 June 2012 в 23:12
поделиться