У меня проблема с выводом на консоль. Я разрабатываю библиотеку для других разработчиков, которая будет обеспечивать ведение журнала консоли и ввод команд консоли. Разработчик должен иметь возможность вводить ввод без перезаписи вывода.
В настоящее время консоль немедленно рисует любую клавишу, которую нажимает пользователь. Я настроил его так, что когда из программы поступает новый вывод, дисплей ввода перемещается, используя SetConsoleOutput
и SetConsoleCursorPosition
.
Однако дисплей все разваливается, как только пользователь начинаетчтобы отступить слишком далеко, используйте клавиши со стрелками за пределами их области ввода или нажмите Home / End. Если пользователь вводит какой-то ввод, то вывод будет записан поверх него, его ввод снова отобразится в строке ниже, и курсор консоли переместится обратно вниз. Но если они нажимают Домой, их курсор располагается прямо внутри содержимого, которое они не ввели:
Это безнадежное дело или есть способ заставить это работать?
Как есть, у меня есть две альтернативы:
- Переключиться на чтение каждое отдельное событие нажатия клавиши , исключая любые функции доступа и локализации, такие как IME, и добавляядополнительные сложности для клавиш со стрелками, возврата, удаления и т. д.
- Полностью выбросить консоль и использовать обычное окно с элементом управления Rich Edit .