Используйте функцию Writefile, чтобы поместить строку в неактивный экранный буфер в C - PullRequest
0 голосов
/ 07 сентября 2018

Я учусь в старшей школе в Корее, и я заинтересован в создании оконной консоли в C. Для создания игры я хочу использовать технику под названием Двойная буферизация, чтобы сделать экран игры более плавным. Для этого я составляю план. Сначала сделаем два консольных буфера экрана. Во-вторых, записать некоторую строку в буфер второго экрана, пока я показываю пользователю первый экранный буфер. В-третьих, сделайте активным буфер второго экрана.

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

#include <stdio.h>
#include <Windows.h>

int main()
{
    HANDLE hBuffer[2];
    COORD  size = { 150, 40 };
    COORD  Coor = { 50, 30 };
    SMALL_ RECT rect;
    DWORD  dw;

    rect.Left = 0;
    rect.Right = 150 - 1;
    rect.Top = 0;
    rect.Bottom = 40 - 1;

    hBuffer[0] = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    SetConsoleScreenBufferSize(hBuffer[0], size);
    SetConsoleWindowInfo(hBuffer[0], TRUE, &rect);

    hBuffer[1] = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    SetConsoleScreenBufferSize(hBuffer[1], size);
    SetConsoleWindowInfo(hBuffer[1], TRUE, &rect);

    SetConsoleActiveScreenBuffer(hBuffer[1]);
    Sleep(1000);
    SetConsoleCursorPosition(hBuffer[0], Coor);
    Sleep(1000);
    WriteFile(hBuffer[0], "asd", strlen("asd"), &dw, NULL);
    Sleep(1000);
    SetConsoleActiveScreenBuffer(hBuffer[0]);

    while (1) 
    {
    }
}

Я намереваюсь записать строку «asd» в буфер второго экрана, но строка «asd» записана в буфер первого экрана. Я думаю, что эта проблема происходит из-за моего неправильного представления о функции WriteFile. когда я набираю WriteFile (hBuffer [1], ...); Это не значит, что я хочу записать строку в буфер второго экрана? и Как записать строку в буфер второго экрана, когда буфер второго экрана неактивен?

1 Ответ

0 голосов
/ 07 сентября 2018

Когда я играл с ним много лет назад, я использовал другие функции (не файловые) WriteConsoleOutput и ReadConsoleOutput

https://docs.microsoft.com/en-us/windows/console/reading-and-writing-blocks-of-characters-and-attributes

...