WriteConsoleOutputCharacterW - Где мои новые строки? - PullRequest
1 голос
/ 28 сентября 2019

Я пытаюсь научиться использовать экранный буфер, и я допустил ошибку, которую не понимаю.Вот настройки для моего экранного буфера:

wchar_t* screen = new wchar_t[nScreenWidth * nScreenHeight];
for (int i = 0; i < nScreenWidth * nScreenHeight; i++) {
    screen[i] = L' ';
}

HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole);
DWORD dwBytesWritten = 0;

WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);

Мне удается напечатать на нем свой 2D-массив, но странно, что он ровно лежит в моем окне терминала (см. Ссылку на экран печати).

Небольшой экран печати моего неудачного 2D-массива

Это как если бы все новые строки были удалены.Это мой цикл, который печатает мой 2D-массив на «screen».

int g = 0;

while (g < 100) {
    WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);

    for (int i = 0; i < field.difficulty; i++) {
        std::this_thread::sleep_for(std::chrono::milliseconds(50));

    }

    for (int y = 0; y < field.nFieldHeight; y++) {
        for (int x = 0; x < field.nFieldWidth; x++) {

            screen[(y + 2) * field.nFieldWidth + (x + 2)] = field.matrix[x][y];
        }

    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...