gpt4 book ai didi

控制台图形帮助!

转载 作者:太空狗 更新时间:2023-10-29 15:39:33 26 4
gpt4 key购买 nike

在下面的代码中,我应该如何在控制台底部创建一个彩色条??以下代码使栏位于最顶部,但我不想在底部创建栏。我应该怎么做?

void main(void)
{
HANDLE hOutput = (HANDLE)GetStdHandle( STD_OUTPUT_HANDLE );
// Set the text output position to (5,10)
COORD sPos;
sPos.X = 5;
sPos.Y = 10;
SetConsoleCursorPosition( hOutput, sPos );

// Set the color to bright green
SetConsoleTextAttribute( hOutput,
FOREGROUND_INTENSITY | FOREGROUND_GREEN );

// Write the text
DWORD nWritten;
WriteConsole( hOutput, "This is a test", 14, &nWritten, NULL );

CHAR_INFO buffer[SCREEN_HEIGHT][SCREEN_WIDTH];

COORD dwBufferSize = { SCREEN_WIDTH,SCREEN_HEIGHT };
COORD dwBufferCoord = { 0, 0 };
SMALL_RECT rcRegion = { 0, 0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1 };

WriteConsoleOutput( hOutput, (CHAR_INFO *)buffer, dwBufferSize,
dwBufferCoord, &rcRegion );
}

最佳答案

使用GetConsoleScreenBufferInfo获得CONSOLE_SCREEN_BUFFER_INFO结构。

CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
GetConsoleScreenBufferInfo(hOutput, &bufferInfo);

您可以使用 srWindow,它将为您提供显示窗口角的坐标。

使用它来将栏定位在底部:

// bufferInfo is a structure CONSOLE_SCREEN_BUFFER_INFO.
SMALL_RECT rcRegion =
{
bufferInfo.srWindow.Left,
bufferInfo.srWindow.Top,
SCREEN_WIDTH-1,
SCREEN_HEIGHT-1
};

我不确定 sr.Window.Left 是否为零,但让我们安全一点。

更新 1:我在 rcRegion 中使用了 Bottom,应该是 Top。我误解了原始代码。


现在你的代码有一些问题。首先,您正在使用未初始化的内存并将其写入缓冲区。它通常会产生滑稽的效果。

其次,您需要了解,当您将这样一个大区域直接写入缓冲区时,您将覆盖之前存在的任何内容。这包括您在开头写的文字。

如果您想保留它,您首先需要从缓冲区中读取、更改它并写回。

无论如何,如何解决 CHAR_BUFFER 问题:

CHAR_INFO buffer[SCREEN_HEIGHT][SCREEN_WIDTH]; 
memset(&buffer, 0, sizeof(buffer));

归零。这可确保缓冲区中的每个字符都将在其写入位置呈现黑色空白。

然后我们需要打印出我们的柱状图。我在这里使用小写字母 O 的字符。

for (int i = 0; i < SCREEN_WIDTH; i++)
{
buffer[SCREEN_HEIGHT - 1][i].Char.AsciiChar = 'o';
buffer[SCREEN_HEIGHT - 1][i].Attributes = FOREGROUND_BLUE;
}

这应该非常简单。您将 o 写入缓冲区的最后一行。我们还告诉它让它变成蓝色。如果您愿意,可以使用“宽字符”(unicode),UnicodeChar = L'å'

这将呈现如下结果:

Console output on Win7 x86-64

您可以在这里看到一些剩余的问题。我们的缓冲区不会覆盖所有屏幕区域,保留一些完整的部分(您可以在空白处看到 cl.exe 的结果。)

原因很明显:SCREEN_* 与窗口的实际宽度和高度不对应。

另外,我的提示在 block 的中间结束,但这主要是因为我们的程序在退出后没有清理。它在终止之前是不可见的。

关于控制台图形帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com