SetCurrentConsoleFontEx 用于使文本加粗

SetCurrentConsoleFontEx for Making Text Bold

本文关键字:文本 用于 SetCurrentConsoleFontEx      更新时间:2023-10-16

我正在尝试创建一个函数(C++年(,该函数使用 WinAPI 在控制台中制作类似于"标头"的东西。通过"标题",我只是希望文本是另一种颜色和粗体。我可以更改颜色,但加粗文本令人沮丧。

我读过关于使用SetCurrentConsoleFontEx()使文本加粗的混合答案;有些人说这是可能的,而另一些人则说它不是(以一种不太直接的方式(。我遇到了关于这个问题的评论,说粗体颜色变化可以应用于单个角色。

这是我正在尝试的。当然,这段代码是简化的。

auto errormsg = []() { std::cout << "nError!n" << std::endl; };
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX font_info = { sizeof(font_info) };
try
{
if (!GetCurrentConsoleFontEx(h, false, &font_info)) throw;
auto old_font = font_info;
font_info.FontWeight = FW_BOLD;
if (!SetCurrentConsoleFontEx(h, false, &font_info)) throw;
if (!SetConsoleTextAttribute(h, /* A short for color ID */)) throw;
std::cout << /* Header text here */ << std::endl;
// Restore old font and old font color...
}
catch (...)
{
errormsg();
exit(1);
}

虽然我在这里使用C++功能,但我可以使用纯 C 解决方案;当然,我更喜欢最简单的东西。

Edit
澄清一下,问题是当我恢复旧字体时,整个控制台窗口都会恢复。我显然不希望这种情况发生。

这是控制台的默认行为。

如果要在控制台窗口中支持不同的粗体字体,可能需要通过反馈中心提交反馈。

  • 如何在反馈中心应用中提交?

我想你需要的所有东西都在这里 https://learn.microsoft.com/en-us/windows/console/window-and-screen-buffer-size