AddFontResource + SetCurrentConsoleFontEx 不会更改控制台字体
AddFontResource + SetCurrentConsoleFontEx are not changing a console font
我正在尝试将控制台字体更改为自定义字体,但是这个特定的代码片段似乎没有任何帮助,即使这是我在尝试在互联网上寻找解决方案时想到的。我只用这种自定义字体测试了 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;
}
您正在使用FR_PRIVATE
标志调用AddFontResourceEx()
,这意味着该字体仅适用于您的进程。
不幸的是,控制台窗口不是您的进程的一部分(GetWindowThreadProcessId()
在这方面!它由一个系统进程(Win 7之前的"csrss.exe",从那时起"conhost.exe")托管。
请参阅:Windows 命令行:在 Windows 控制台内部
若要使字体可用于控制台,必须删除 FR_PRIVATE
标志或永久安装字体。
相关文章:
- 在C++中测量postscript字体宽度
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- C++控制台应用程序阻止退出
- 如何修复此iFile以将.txt输出到控制台
- 为什么控制台要求输入,即使代码中没有输入
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 控制台输出在 Qt5 中未正确显示
- C++出现控制台错误.我无法识别源代码的问题
- C++程序不会从 Windows 控制台运行
- 有人可以向我解释为什么控制台输出 0 吗?
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- Win32 API 控制台光标在 WriteConsole 后不移动
- 我如何将编程控制台字体设置为Lucida
- AddFontResource + SetCurrentConsoleFontEx 不会更改控制台字体
- 在全屏模式下设置控制台字体大小
- 如何以编程方式将控制台字体设置为“光栅字体”