Мое приложение требует, чтобы консоль была встроена в окно приложения, например, в такой программе, как AutoCAD, где консоль находится в нижней части окна в ожидании команд.
Мне нужна консоль в моем приложении, чтобы я мог изменять переменные и другие вещи, поэтому консоль не должна быть полностью раздутой оболочкой.
На данный момент у меня есть простая консоль в моем приложении, но она кажется очень неуклюжей по сравнению с терминалом (оболочкой), на что я и хочу, чтобы консоль была похожа.
То, как я сделал это с консолью, которая у меня есть, заключается в том, что когда пользователь нажимает клавишу TAB
, которую показывает консоль, тогда они могут ввести свою команду/строку; После нажатия клавиши Return
введенная строка анализируется, и команда обрабатывается.
Я использую объекты sf::Text
для вывода текста в окне приложения. Всего используется 5 объектов sf::Text
, 4 для предыдущих команд/сообщений об ошибках и 1 для текущей командной строки. При нажатии клавиши Return
4-я sf::Text
меняет свою текущую строку на 3-ю, 3-я на 2-ю, 2-я на 1-ю и 1-я на текущую командную строку, после чего текущая командная строка очищается и снова готова к вводу. Таким образом, остается место для 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]);
}
App
это всего лишь sf::RenderWindow*
Мой общий вопрос заключается в следующем: Есть ли способ встроить консоль в окно SFML без того, чтобы это было просто изображение текстовых объектов, отображаемое так, чтобы оно выглядело как консоль, как я сделал выше. Я бы предпочел иметь настоящую консоль/оболочку/терминал в своем приложении. Как и стандартная оболочка bash, но, конечно же, мой собственный интерпретатор оболочки.