在C中使用Writefile函数将字符串放入非活动屏幕缓冲区

在C中使用Writefile函数将字符串放入非活动屏幕缓冲区,c,winapi,console,double-buffering,C,Winapi,Console,Double Buffering,我是韩国的一名高中生,我对用C语言制作窗口控制台游戏感兴趣。 为了制作游戏,我想使用一种叫做双缓冲的技术来制作平滑的游戏画面。 为此,我制定了计划。 首先,制作两个控制台屏幕缓冲区。 第二,在向用户显示第一个屏幕缓冲区时,在第二个屏幕缓冲区中写入一些字符串。 第三,激活第二个屏幕缓冲区 但是,当我这样做时,我想在第二个屏幕缓冲区中写入的字符串被写入第一个屏幕缓冲区。 这是我的密码 #include <stdio.h> #include <Windows.h> int m

我是韩国的一名高中生,我对用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) 
    {
    }
}
#包括
#包括
int main()
{
处理hBuffer[2];
坐标大小={150,40};
COORD Coor={50,30};
小矩形;
德沃德;
矩形左=0;
右矩形=150-1;
矩形顶部=0;
矩形底部=40-1;
hBuffer[0]=CreateConsolesScreenbuffer(通用读写,0,NULL,控制台文本模式缓冲,NULL);
SetConsoleScreenBufferSize(hBuffer[0],大小);
SetConsoleWindowInfo(hBuffer[0]、TRUE和rect);
hBuffer[1]=CreateConsolesScreenbuffer(泛型读取|泛型写入,0,NULL,控制台文本模式缓冲,NULL);
设置控制台屏幕缓冲区大小(hBuffer[1],大小);
SetConsoleWindowInfo(hBuffer[1],TRUE和rect);
SetConsoleActivesScreenbuffer(hBuffer[1]);
睡眠(1000);
设置控制台位置(hBuffer[0],Coor);
睡眠(1000);
写文件(hBuffer[0],“asd”,strlen(“asd”),&dw,NULL);
睡眠(1000);
SetConsoleActivesScreenbuffer(hBuffer[0]);
而(1)
{
}
}
我打算在第二个屏幕缓冲区中写入字符串“asd”,但在第一个屏幕缓冲区中写入字符串“asd”。 我认为这个问题源于我对WriteFile函数的误解。 当我键入WriteFile(hBuffer[1],…)时; 这并不意味着我要将字符串写入第二个屏幕缓冲区?
当第二个屏幕缓冲区处于非活动状态时,如何将字符串写入第二个屏幕缓冲区?

当我在玩它时,我正在使用另一个函数(不是文件函数)WriteConsoleOutput和ReadConsoleOutput


当我搜索控制台功能时,我找到了这些功能。当时,我认为他们有点不礼貌,效率低下。但是,有了这个解释和示例,如果没有其他方法,我认为它们是非常好的函数。实际上,想想看,我可以用这些函数来做我自己的函数!谢谢你的回答。这真的帮了我很多忙。