AddFontResource + SetCurrentConsoleFontEx не меняют консольный шрифт - PullRequest
0 голосов
/ 23 декабря 2018

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

#include <iostream>
#include <Windows.h>

int main()
{

    std::cout << "Default font" << std::endl;
    system("pause");

    HANDLE m_stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    AddFontResourceEx(L"Iosevka.ttf", FR_PRIVATE, 0);
    SendNotifyMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

    CONSOLE_FONT_INFOEX cfie;
    ZeroMemory(&cfie, sizeof(cfie));
    cfie.cbSize = sizeof(cfie);
    cfie.dwFontSize.Y = 21;
    lstrcpyW(cfie.FaceName, L"Iosevka");

    SetCurrentConsoleFontEx(m_stdOut, false, &cfie);
    std::cout << "Custom font" << std::endl;
    RemoveFontResource(L"Iosevka.ttf");

    system("pause");
    return 0;

}

1 Ответ

0 голосов
/ 23 декабря 2018

Вы звоните AddFontResourceEx() с флагом FR_PRIVATE, что означает, что шрифт доступен только вашему процессу.

К сожалению, окно консоли не является частью вашего процесса (GetWindowThreadProcessId() относится к этому!).Он размещается в системном процессе («csrss.exe» до Win 7, с тех пор «conhost.exe»).

См .: Командная строка Windows: внутри консоли Windows

Чтобы сделать шрифт доступным для консоли, вы должны удалить флаг FR_PRIVATE или установить шрифт навсегда.

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