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

问题描述 投票:1回答:1

我是韩国的高中生,我有兴趣在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],...);这并不意味着我想将字符串写入第二个屏幕缓冲区?以及如何在第二个屏幕缓冲区处于非活动状态时将字符串写入第二个屏幕

c winapi console double-buffering
1个回答
1
投票

我多次使用它时,我使用的是另一个函数(不是文件)WriteConsoleOutput和ReadConsoleOutput

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

© www.soinside.com 2019 - 2024. All rights reserved.