【问题标题】:How to change the background color of the console at a specific point by coordinates or so using C?如何使用C在特定点通过坐标更改控制台的背景颜色?
【发布时间】:2021-05-21 09:52:30
【问题描述】:

我需要更改控制台中某个单元格的颜色,而不使用SetConsoleTextAttribute 函数或类似方法在控制台中打印任何具有给定颜色的字符。

【问题讨论】:

  • 您应该编辑问题并添加到目前为止所做的任何事情。
  • 我认为这没有任何意义。唯一的问题是如何直接更改控制台任何“片断”的背景颜色。有最简单的方法:SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), COLOR); printf (" "); 但是这种方法不适合我。
  • 正确的函数是FillConsoleOutputAttribute。毫不犹豫地上一层,在 API 文档中找到相关函数的列表。
  • 为什么不适合你?您可能应该提到您不能这样做 SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), COLOR); printf (" "); 以及为什么。
  • 非常感谢

标签: c winapi


【解决方案1】:

FillConsoleOutputAttribute 函数 为指定数量的字符单元设置字符属性,从屏幕缓冲区中的指定坐标开始。

BOOL WINAPI FillConsoleOutputAttribute(
  _In_  HANDLE  hConsoleOutput,
  _In_  WORD    wAttribute,
  _In_  DWORD   nLength,
  _In_  COORD   dwWriteCoord,
  _Out_ LPDWORD lpNumberOfAttrsWritten
);

如果要设置属性的字符单元的数量超出控制台屏幕缓冲区中指定行的末尾,则设置下一行的单元。如果要写入的单元格数量超出控制台屏幕缓冲区的末尾,则这些单元格将被写入到控制台屏幕缓冲区的末尾。

写入位置的字符值不变。

不推荐使用此 API,并且没有等效的特定虚拟终端。不支持填充可视窗口之外的区域,并为终端的历史空间保留。通过移动光标、设置新属性、然后为该区域编写所需的文本、如果需要在填充运行的长度内重复字符来执行用新文本或颜色填充可见区域。可能需要额外的光标移动,然后写入所需的文本以填充矩形区域。客户端应用程序应保留自己对屏幕内容的记忆,并且无法查询远程状态。更多信息可以在经典控制台与虚拟终端文档中找到。

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 2011-09-21
    • 2019-08-29
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多