找到了一个通过ReadConsoleOutputCharacter以及WriteConsoleOutputCharacter实现双缓冲的方式,但无法保存更多的字符信息(如颜色等)。
即使是这样,我依然不能够找到能够正常运作的代码或手动实现这样的功能。
这是我从网上找来的代码,还请村长帮忙纠错。
环境为win10 20h2 19042.928,MSVC以及g++编译出的代码均失效。
#include <stdio.h>
#include <Windows.h>
using namespace std;
int main() {
HANDLE hOutput;
COORD coord = { 0,0 };
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hOutBuf = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL
);
SetConsoleActiveScreenBuffer(hOutBuf);
CONSOLE_CURSOR_INFO cci;
cci.bVisible = 0;
cci.dwSize = 1;
SetConsoleCursorInfo(hOutput, &cci);
SetConsoleCursorInfo(hOutBuf, &cci);
DWORD bytes = 0;
char data[800];
while (1){
for (char c = 'a'; c < 'z'; c++){
system("cls");
for (int i = 0; i < 800; i++)printf("%c", c);
ReadConsoleOutputCharacterA(hOutput, data, 800, coord, &bytes);
WriteConsoleOutputCharacterA(hOutBuf, data, 800, coord, &bytes);
}
}
return 0;
}