c ++控制台缓冲区偏移量

时间:2016-05-10 10:43:07

标签: c++ winapi

尝试使用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函数光标移动到数据旁边的位置,并将其放在下一行。这就是为什么缓冲区在一条线上移动的原因。

0 个答案:

没有答案