but*_*png 2 c++ console winapi fonts window
我正在尝试将控制台字体更改为自定义字体,但是这个特定的代码片段似乎没有完成任何事情,尽管这是我在尝试在互联网上寻找解决方案时想到的。我通过手动安装并使用注册表将其添加到控制台,使用此自定义字体测试了 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;
}
Run Code Online (Sandbox Code Playgroud)
您正在AddFontResourceEx()使用FR_PRIVATE标志进行调用,这意味着该字体仅适用于您的进程。
不幸的是,控制台窗口不是您的进程的一部分(GetWindowThreadProcessId()就在这方面!)。它由系统进程托管(Win 7 之前为“csrss.exe”,此后为“conhost.exe”)。
要使该字体可用于控制台,您必须删除该FR_PRIVATE标志或永久安装该字体。