使用 Writefile 函数将字符串放入 C 中的非活动屏幕缓冲区
Use Writefile function to put string in inactive screen buffer in C
我是韩国的一名高中生,我有兴趣用 C 语言制作 window 主机游戏。
为了制作游戏,我想使用称为双缓冲的技术来制作流畅的游戏画面。
为此,我制定计划。
首先,制作两个控制台屏幕缓冲区。
其次,当我向用户显示第一个屏幕缓冲区时,在第二个屏幕缓冲区中写入一些字符串。
第三,激活第二个屏幕缓冲区。
但是,当我这样做时,我想写入第二个屏幕缓冲区的字符串被写入了第一个屏幕缓冲区。
这是我的代码。
#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], ...);
这并不意味着我想将字符串写入第二个屏幕缓冲区?
以及如何在第二个屏幕缓冲区处于非活动状态时将字符串写入第二个屏幕缓冲区?
很多年前我在玩它的时候使用了另一个函数(不是文件函数)WriteConsoleOutput 和 ReadConsoleOutput
我是韩国的一名高中生,我有兴趣用 C 语言制作 window 主机游戏。 为了制作游戏,我想使用称为双缓冲的技术来制作流畅的游戏画面。 为此,我制定计划。 首先,制作两个控制台屏幕缓冲区。 其次,当我向用户显示第一个屏幕缓冲区时,在第二个屏幕缓冲区中写入一些字符串。 第三,激活第二个屏幕缓冲区。
但是,当我这样做时,我想写入第二个屏幕缓冲区的字符串被写入了第一个屏幕缓冲区。 这是我的代码。
#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], ...); 这并不意味着我想将字符串写入第二个屏幕缓冲区? 以及如何在第二个屏幕缓冲区处于非活动状态时将字符串写入第二个屏幕缓冲区?
很多年前我在玩它的时候使用了另一个函数(不是文件函数)WriteConsoleOutput 和 ReadConsoleOutput