【问题标题】:SetCurrentConsoleFontEx for Making Text BoldSetCurrentConsoleFontEx 使文本加粗
【发布时间】:2020-04-27 11:17:28
【问题描述】:

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

我已经阅读了有关使用 SetCurrentConsoleFontEx() 将文本加粗的混合答案;有些人说这是可能的,而另一些人则说不是(以一种不太直接的方式)。我在this question 上看到一条评论说粗体颜色变化可以应用于单个字符。

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

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 解决方案;当然,我更喜欢最简单的。

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

【问题讨论】:

  • 如果您想要一个粗体标题,您可以将颜色设置为全白色,而不是通常默认的暗色版本。使用控制台输出,不值得花太多时间在上面。它只是一个控制台,不适用于严肃的演示。
  • 控制台屏幕缓冲区只能分配一种字体。您不能用一种字体编写标题,然后对其他文本使用不同的字体。
  • @WeatherVane 问题在于用户能够以他们想要的任何颜色打印标题。
  • @IInspectable 有没有办法解决这个问题?也许使用多个屏幕缓冲区或某种多线程?
  • 您链接的问题并没有说单个字符可以加粗。 “这会影响整个控制台窗口......如果您想在单个控制台窗口中混合字体大小,这对您没有帮助。”

标签: c++ c windows winapi fonts


【解决方案1】:

这是控制台的默认行为。

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

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 2016-06-07
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多