尝试使用WINAPI WriteConsole函数编写控制台我发现控制台缓冲区似乎有一些偏移量,但我无法找到它的位置。
以下是我更改窗口和缓冲区大小的代码示例。
output_handle = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT window_size = { 0, 0, screen_size.X - 1, screen_size.Y - 1 };
SetConsoleScreenBufferSize(output_handle, screen_size);
SetConsoleWindowInfo(output_handle, TRUE, &window_size);
之后我使用next来填充应该传递给WriteConsole的wstring
for (int i = 0; i < 10; i++)
{
screen_to_draw[i] = '!'; // it should be the first line
screen_to_draw[screen_size.Y*screen_size.X - screen_size.X + i] = '!'; //and this one - the last one
}
最后:
WriteConsole(output_handle, screen_to_draw.c_str(), screen_size.X*screen_size.Y, done, NULL);
但是使用上面的代码我根本看不到第一行,最后一行从底部放置第二行。
如果我将代码修改为下一个:
for (int i = 0; i < 10; i++)
{
screen_to_draw[screen_size.X+i] = '!'; // it should be the second line
}
此行将是屏幕上的第一行。所以看起来这个缓冲区的第一行是在屏幕上,而最后一行在控制台底部的一行中。
没有执行任何其他操作。 你能帮忙解决一下这个案子吗?
UPD: 发现问题后,使用WriteConsole函数光标移动到数据旁边的位置,并将其放在下一行。这就是为什么缓冲区在一条线上移动的原因。