Я учусь в старшей школе в Корее, и я заинтересован в создании оконной консоли в 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], ...);
Это не значит, что я хочу записать строку в буфер второго экрана?
и Как записать строку в буфер второго экрана, когда буфер второго экрана неактивен?