SetCurrentConsoleFontEx для выделения текста жирным шрифтом - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь создать функцию (в 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 решением; Конечно, я предпочитаю все самое простое.

Редактировать Чтобы уточнить, проблема в том, что когда я восстанавливаю старый шрифт, все окно консоли возвращается обратно. Я, очевидно, не хочу, чтобы это произошло.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Это стандартное поведение консоли.

Если вы хотите поддерживать жирный шрифт разными в окне консоли, вам может потребоваться отправить отзыв через хаб обратной связи.

0 голосов
/ 20 января 2020

Я думаю, все, что вам нужно здесь https://docs.microsoft.com/en-us/windows/console/window-and-screen-buffer-size

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...