Редактирование текста в консоли
Нужно сделать редактирование текста в консоли (с рабочим перемещением курсора по стрелкам вверх-вниз вправо-влево). На просторах великого и необъятного нашел решение для редактирования строк:
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
system("chcp 1251");
system("cls");
COORD coord;
string Input;
cout << "Введите строку: ";
getline(cin, Input);
cout << "Изменить строку: " << "\n";
CONSOLE_SCREEN_BUFFER_INFO bi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &bi); //записываем информацию о буфере экрана в консоли в bi
coord.X = bi.dwCursorPosition.X; //получаем координаты курсора (это будут координаты начала строки после ее вывода)
coord.Y = bi.dwCursorPosition.Y;
cout << Input;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); //устанавливаем курсор на ранее полученные координаты
getline(cin, Input);
cout << Input;
return 0;
}
Но к сожалению изменение не сохраняет введенный до этого текст...
Пробовал способ через функцию _getch() библиотеки conio.h, где идет захват символа. Считывание и редактирование строки без стрелок, можно сказать, меня устраивало.
#include <iostream>
#include <conio.h>
constexpr auto BSP = 8;
constexpr auto SPC = 32;
constexpr auto TAB = 9;
constexpr auto ENT = 13;
constexpr auto ESC = 27;
int getstr(char* str, int max) {
char c;
int i = 0;
do {
c = _getch();
//_getch();
switch(c){
case BSP: if (i != 0) {
std::cout << "\b \b";
str[--i] = 0;
}break;
case TAB: case ENT: case ESC: {str[i] = 0; return i + 1; }
default: if (i != max-1) { std::cout << c; str[i++] = c; }
}
} while (c != 0);
}
Но при попытке добавить переход по стрелкам я столкнулся с проблемой первичного байта (при нажатии стрелок и некоторых других клавиш идет захват двух значений: первичного байта '\224' и собственно стрелки. Главная проблема в том, что код первичного байта совпадает с кодом символа 'а', что усложняет задачу.

Только недавно сел за изучение WinAPI, ищу пока решение там. Прошу, подскажите на что мне обратить внимание или возможное решение проблемы первичного байта.