【发布时间】: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