c++ - SetCurrentConsoleFontEx 用于将文本设为粗体

标签 c++ c windows winapi fonts

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

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

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

最佳答案

这是控制台的默认行为。

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

关于c++ - SetCurrentConsoleFontEx 用于将文本设为粗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670949/

相关文章:

从C内核模块检查/proc文件

windows - 完成命令行后关闭程序

java - Windows 手机 : automatically copy files on reboot

c++ - 清空模板参数以节省空间

c++ - 使用 QItemDelegate 显示图片缩略图

python - 编译 swig 输出时找不到 arrayobject.h

c - 如何在 Linux 中构建自动运行程序

c - 时间(空);与时间(&something);

c - 将入口点更改为PE文件中新添加的shellcode段后,如何恢复主进程?

C++ 可移植数组序列化